From 1ad203467c170860321789264479ef17bb33a831 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denny=20Korsuk=C3=A9witz?= Date: Wed, 3 Jan 2024 10:45:28 +0100 Subject: [PATCH] Tidied --- .../project/templates/test.sublime-workspace | 5908 ----------------- package.json | 4 +- 2 files changed, 2 insertions(+), 5910 deletions(-) delete mode 100644 generators/project/templates/test.sublime-workspace diff --git a/generators/project/templates/test.sublime-workspace b/generators/project/templates/test.sublime-workspace deleted file mode 100644 index 58d48ba..0000000 --- a/generators/project/templates/test.sublime-workspace +++ /dev/null @@ -1,5908 +0,0 @@ -{ - "auto_complete": - { - "selected_items": - [ - [ - "hell", - "hello_world" - ], - [ - "den", - "DennyKorsukewitz" - ], - [ - "de", - "DennyKorsukewitz" - ], - [ - "fu", - "fun" - ], - [ - "sse", - "assert" - ], - [ - "acr", - "article" - ], - [ - "asser", - "assert" - ], - [ - "a", - "acronym" - ], - [ - "ATT", - "ATTRIBUTE" - ], - [ - "AR", - "ARTICLE" - ], - [ - "Ar", - "Article" - ], - [ - "A", - "Articles" - ], - [ - "ombac", - "znuny.ObjectManager.BackendObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "Ti", - "Ticket" - ], - [ - "Confi", - "znuny.ConfigObject.Get\t6.0, 6.4, 6.5, 7.0" - ], - [ - "config", - "ConfigObject" - ], - [ - "e", - "echo" - ], - [ - "J", - "JSON" - ], - [ - "package", - "package_name" - ], - [ - "con", - "config" - ], - [ - "tickget", - "znuny.TicketObject.TicketGet\t6.0, 6.4, 6.5, 7.0" - ], - [ - "repo", - "repositories" - ], - [ - "RE", - "REPOSITORY" - ], - [ - "Lib", - "LinkObject" - ], - [ - "Lin", - "LinkAddPost" - ], - [ - "omhe", - "znuny.ObjectManager.HelperObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "znneeded", - "znuny.Needed.ObjectManager\tznuny.Needed.ObjectManager" - ], - [ - "mu", - "mutation" - ], - [ - "wo", - "workspaces" - ], - [ - "Con", - "ConfigObject" - ], - [ - "omdy", - "znuny.ObjectManager.DynamicFieldObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "omar", - "znuny.ObjectManager.ArticleObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "omsys", - "znuny.ObjectManager.SysConfigObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "ommain", - "znuny.ObjectManager.MainObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "C", - "Class" - ], - [ - "DYNAMIC", - "DYNAMICFIELD" - ], - [ - "Tab", - "Table" - ], - [ - "Me", - "Median-VodafoneConnector" - ], - [ - "Mess", - "Message" - ], - [ - "F", - "Filename" - ], - [ - "neded", - "znuny.Needed.ObjectManager\tznuny.Needed.ObjectManager" - ], - [ - "parse_f", - "parse_file" - ], - [ - "modul", - "znuny.SOPM.ModuleRequired\txml" - ], - [ - "lineLe", - "_lineLength" - ], - [ - "l", - "length" - ], - [ - "w", - "workspaceFolders" - ], - [ - "wor", - "workspace" - ], - [ - "Group", - "GroupID" - ], - [ - "Su", - "Success" - ], - [ - "isde", - "znuny.UnitTestObject.IsDeeply\t6.0, 6.4, 6.5, 7.0" - ], - [ - "Ob", - "ObjectID" - ], - [ - "Co", - "Config" - ], - [ - "conget", - "znuny.ConfigObject.Get\t6.0, 6.4, 6.5, 7.0" - ], - [ - "Grou", - "GroupID" - ], - [ - "Is", - "IsPositiveInteger" - ], - [ - "M", - "Message" - ], - [ - "Da", - "DataList" - ], - [ - "grep", - "grep.array\tgrep.array" - ], - [ - "param", - "znuny.ParamObject.GetParam\t6.0, 6.4, 6.5, 7.0" - ], - [ - "sing", - "znuny.Language.Singleqoute\tznuny.Language.Singleqoute" - ], - [ - "gre", - "grep.array\tgrep.array" - ], - [ - "GR", - "GROUP" - ], - [ - "Gr", - "Groups" - ], - [ - "PA", - "Params" - ], - [ - "H", - "HTML" - ], - [ - "g", - "znuny.GitLab.Default\t.gitlab-ci.yml" - ], - [ - "gr", - "GroupGet" - ], - [ - "omcon", - "znuny.ObjectManager.ConfigObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "omdebu", - "znuny.ObjectManager.DebuggerObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "ompara", - "znuny.ObjectManager.ParamObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "omval", - "znuny.ObjectManager.ValidObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "omva", - "znuny.ObjectManager.ValidObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "Ge", - "GetParam" - ], - [ - "getpara", - "znuny.ParamObject.GetParams\t6.4, 6.5, 7.0" - ], - [ - "zngetpara", - "znuny.ParamObject.GetParamNames\t6.0, 6.4, 6.5, 7.0" - ], - [ - "omti", - "znuny.ObjectManager.TimeObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "znunsystemad", - "znuny.SystemAddressObject.SystemAddressList\t6.0, 6.4, 6.5, 7.0" - ], - [ - "scaff", - "znuny.Scaffolding.UnitTest\tperl" - ], - [ - "znunysopm", - "znuny.SOPM.Filelist\txml" - ], - [ - "sca", - "znuny.Scaffolding.UnitTest\tperl" - ], - [ - "intro", - "znuny.SOPM.IntroInstall\txml" - ], - [ - "file", - "znuny.SOPM.Filelist\txml" - ], - [ - "dabase", - "znuny.SOPM.DatabaseInstall\txml" - ], - [ - "new", - "__m_new" - ], - [ - "le", - "length" - ], - [ - "consol", - "console.log\tjs" - ], - [ - "la", - "languageData" - ], - [ - "Web", - "WebserviceID" - ], - [ - "f", - "file_list" - ], - [ - "sop", - "sopm_tags" - ], - [ - "so", - "sopm_tag" - ], - [ - "packa", - "package_prefix" - ], - [ - "package_", - "package_prefix" - ], - [ - "cos", - "console" - ], - [ - "pack", - "package_prefix" - ], - [ - "cons", - "console.log\tjs" - ], - [ - "xml_", - "xml_config_file" - ], - [ - "IS", - "IsHashRefWithData" - ], - [ - "omhm", - "znuny.ObjectManager.HTMLUtilsObject\t6.0, 6.4, 6.5, 7.0" - ], - [ - "AgentTicket", - "AgentTicketZoom" - ], - [ - "User", - "UserID" - ], - [ - "Emai", - "Email" - ], - [ - "sub", - "sub\tsub" - ], - [ - "needed", - "znuny.Needed.ObjectManager\tznuny.Needed.ObjectManager" - ], - [ - "Up", - "UploadStuff" - ], - [ - "paramget", - "znuny.ParamObject.GetParams\t6.4, 6.5, 7.0" - ], - [ - "co", - "console.log\tjs" - ], - [ - "here", - "znuny.STDERR.HERE\tznuny.STDERR.HERE" - ], - [ - "dumper", - "znuny.STDERR.Dumper\tznuny.STDERR.Dumper" - ], - [ - "TicketGet", - "znuny.TicketObject.TicketGet\t6.0, 6.4" - ], - [ - "dumer", - "znuny.STDERR.Dumper\tznuny.stderr.dumper" - ], - [ - "FRA", - "FRAMEWORK_VERSION" - ], - [ - "dumepr", - "znuny.STDERR.Dumper\tznuny.stderr.dumper" - ], - [ - "FRAM", - "FRAMEWORK_DIR" - ], - [ - "ex", - "exit" - ], - [ - "om", - "znuny.ObjectManager.UtilObject\t6.4" - ], - [ - "omu", - "znuny.ObjectManager.UserObject\t6.0, 6.4" - ] - ] - }, - "buffers": - [ - { - "file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/CHANGES.md", - "settings": - { - "buffer_size": 985242, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/USAGE", - "settings": - { - "buffer_size": 323, - "encoding": "UTF-8", - "line_ending": "Unix" - }, - "undo_stack": - [ - [ - 14, - 1, - "paste", - null, - "AgAAADsAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAB4AAAAAAAAAEMAAABmaWxlIHRvIHJlZ2lzdGVyIHlvdXIgbmV3IGNvbW1hbmQgLyBwbHVnaW4gZm9yIHRoZSBDb21tYW5kIFBhbGV0dGUu", - "AQAAAAAAAAABAAAAOwAAAAAAAAB+AAAAAAAAAAAAAAAAAPC/" - ], - [ - 21, - 1, - "insert", - { - "characters": "project" - }, - "CAAAADIAAAAAAAAAMwAAAAAAAAAAAAAAMwAAAAAAAAAzAAAAAAAAAAgAAABjb21tYW5kczMAAAAAAAAANAAAAAAAAAAAAAAANAAAAAAAAAA1AAAAAAAAAAAAAAA1AAAAAAAAADYAAAAAAAAAAAAAADYAAAAAAAAANwAAAAAAAAAAAAAANwAAAAAAAAA4AAAAAAAAAAAAAAA4AAAAAAAAADkAAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAMgAAAAAAAAA6AAAAAAAAAAAAAAAAAPC/" - ], - [ - 36, - 1, - "paste", - null, - "AQAAAMAAAAAAAAAAxwAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAPC/" - ], - [ - 38, - 1, - "insert", - { - "characters": "/" - }, - "AQAAAMcAAAAAAAAAyAAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAxwAAAAAAAADHAAAAAAAAAAAAAAAAAPC/" - ], - [ - 40, - 1, - "left_delete", - null, - "AQAAAMcAAAAAAAAAxwAAAAAAAAABAAAALw", - "AQAAAAAAAAABAAAAyAAAAAAAAADIAAAAAAAAAAAAAAAAAPC/" - ], - [ - 41, - 1, - "insert", - { - "characters": "s/" - }, - "AgAAAMcAAAAAAAAAyAAAAAAAAAAAAAAAyAAAAAAAAADJAAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAxwAAAAAAAADHAAAAAAAAAAAAAAAAAPC/" - ], - [ - 55, - 1, - "paste", - null, - "AgAAAOAAAAAAAAAA5wAAAAAAAAAAAAAA5wAAAAAAAADnAAAAAAAAAAgAAABjb21tYW5kcw", - "AQAAAAAAAAABAAAA4AAAAAAAAADoAAAAAAAAAAAAAAAAAPC/" - ], - [ - 63, - 1, - "cut", - null, - "AQAAADoAAAAAAAAAOgAAAAAAAAA9AAAAQSBjb2xsZWN0aW9uIG9mIGZpbGVzIGFuZCBmb2xkZXJzLCB3aGljaCBhcmUgc2hvd24gaW4gU2lkZWJhcg", - "AQAAAAAAAAABAAAAOgAAAAAAAAB3AAAAAAAAAAAAAAAAAPC/" - ], - [ - 74, - 1, - "paste", - null, - "AgAAAM4AAAAAAAAA/AAAAAAAAAAAAAAA/AAAAAAAAAD8AAAAAAAAADIAAAB5b3VyIG5ldyBjb21tYW5kIC8gcGx1Z2luIGZvciB0aGUgQ29tbWFuZCBQYWxldHRlLg", - "AQAAAAAAAAABAAAAzgAAAAAAAAAAAQAAAAAAAAAAAAAAAPC/" - ], - [ - 79, - 1, - "left_delete", - null, - "AQAAAM4AAAAAAAAAzgAAAAAAAAAJAAAASW5kaWNhdGU6", - "AQAAAAAAAAABAAAAzgAAAAAAAADXAAAAAAAAAAAAAAAAAPC/" - ], - [ - 82, - 1, - "right_delete", - null, - "AQAAAM4AAAAAAAAAzgAAAAAAAAABAAAAIA", - "AQAAAAAAAAABAAAAzgAAAAAAAADOAAAAAAAAAAAAAAAAAPC/" - ], - [ - 84, - 1, - "trim_trailing_white_space", - null, - "AQAAADkAAAAAAAAAOQAAAAAAAAABAAAAIA", - "AQAAAAAAAAABAAAAzgAAAAAAAADOAAAAAAAAAAAAAAAAAPC/" - ], - [ - 90, - 1, - "insert", - { - "characters": "." - }, - "AQAAAPEAAAAAAAAA8gAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAA8QAAAAAAAADxAAAAAAAAAAAAAAAAAPC/" - ], - [ - 113, - 1, - "insert", - { - "characters": "π" - }, - "AQAAAPIAAAAAAAAA8wAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAA8gAAAAAAAADyAAAAAAAAAAAAAAAAAPC/" - ], - [ - 117, - 1, - "left_delete", - null, - "AQAAAPIAAAAAAAAA8gAAAAAAAAACAAAAz4A", - "AQAAAAAAAAABAAAA8wAAAAAAAADzAAAAAAAAAAAAAAAAAPC/" - ], - [ - 127, - 1, - "insert", - { - "characters": "π" - }, - "AQAAAPIAAAAAAAAA8wAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAA8gAAAAAAAADyAAAAAAAAAAAAAAAAAPC/" - ], - [ - 129, - 1, - "left_delete", - null, - "AQAAAPIAAAAAAAAA8gAAAAAAAAACAAAAz4A", - "AQAAAAAAAAABAAAA8wAAAAAAAADzAAAAAAAAAAAAAAAAAPC/" - ], - [ - 131, - 1, - "insert", - { - "characters": "\n" - }, - "AgAAAPIAAAAAAAAA8wAAAAAAAAAAAAAA8wAAAAAAAAD7AAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAA8gAAAAAAAADyAAAAAAAAAAAAAAAAAPC/" - ], - [ - 135, - 1, - "", - null, - "AQAAAPsAAAAAAAAA/AAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAA+wAAAAAAAAD7AAAAAAAAAAAAAAAAAPC/" - ], - [ - 137, - 1, - "", - null, - "AQAAAPsAAAAAAAAA+wAAAAAAAAABAAAAXg", - "AQAAAAAAAAABAAAA/AAAAAAAAAD8AAAAAAAAAAAAAAAAAPC/" - ], - [ - 138, - 1, - "insert", - { - "characters": "^" - }, - "AQAAAPsAAAAAAAAA/AAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAA+wAAAAAAAAD7AAAAAAAAAAAAAAAAAPC/" - ], - [ - 139, - 1, - "left_delete", - null, - "AQAAAPsAAAAAAAAA+wAAAAAAAAABAAAAXg", - "AQAAAAAAAAABAAAA/AAAAAAAAAD8AAAAAAAAAAAAAAAAAPC/" - ], - [ - 140, - 1, - "trim_trailing_white_space", - null, - "AQAAAPMAAAAAAAAA8wAAAAAAAAAIAAAAICAgICAgICA", - "AQAAAAAAAAABAAAA+wAAAAAAAAD7AAAAAAAAAAAAAAAAAPC/" - ], - [ - 168, - 1, - "paste", - null, - "AgAAABEAAAAAAAAAiQAAAAAAAAAAAAAAiQAAAAAAAACJAAAAAAAAACgAAABDcmVhdGVzIGEgU3VibGltZVBhY2thZ2Uuc3VibGltZS1wcm9qZWN0", - "AQAAAAAAAAABAAAAEQAAAAAAAAA5AAAAAAAAAAAAAAAAAPC/" - ] - ] - }, - { - "file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/config.js", - "settings": - { - "buffer_size": 645, - "encoding": "UTF-8", - "line_ending": "Unix" - }, - "undo_stack": - [ - [ - 6, - 1, - "paste", - null, - "AgAAABoAAAAAAAAAIQAAAAAAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAcAAABDb21tYW5k", - "AQAAAAAAAAABAAAAGgAAAAAAAAAhAAAAAAAAAAAAAAAAAPC/" - ], - [ - 11, - 1, - "left_delete", - null, - "AQAAABoAAAAAAAAAGgAAAAAAAAABAAAAcA", - "AQAAAAAAAAABAAAAGwAAAAAAAAAbAAAAAAAAAAAAAAAAAPC/" - ], - [ - 13, - 1, - "insert", - { - "characters": "P" - }, - "AQAAABoAAAAAAAAAGwAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAGgAAAAAAAAAaAAAAAAAAAAAAAAAAAPC/" - ], - [ - 27, - 1, - "paste", - null, - "AgAAAFUAAAAAAAAAXAAAAAAAAAAAAAAAXAAAAAAAAABcAAAAAAAAAAgAAABjb21tYW5kcw", - "AQAAAAAAAAABAAAAVQAAAAAAAABdAAAAAAAAAAAAAAAAAPC/" - ], - [ - 44, - 1, - "insert", - { - "characters": "\n\n" - }, - "BQAAAKIAAAAAAAAAowAAAAAAAAAAAAAAowAAAAAAAAClAAAAAAAAAAAAAAClAAAAAAAAAKYAAAAAAAAAAAAAAKYAAAAAAAAAqAAAAAAAAAAAAAAAowAAAAAAAACjAAAAAAAAAAIAAAAgIA", - "AQAAAAAAAAABAAAAogAAAAAAAACiAAAAAAAAAAAAAAAAAPC/" - ], - [ - 45, - 1, - "paste", - null, - "AQAAAKYAAAAAAAAA4wAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAApgAAAAAAAACmAAAAAAAAAAAAAAAAAPC/" - ], - [ - 47, - 1, - "insert", - { - "characters": "\n" - }, - "AgAAAOMAAAAAAAAA5AAAAAAAAAAAAAAA5AAAAAAAAADmAAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAA4wAAAAAAAADjAAAAAAAAAAAAAAAAAPC/" - ], - [ - 52, - 1, - "cut", - null, - "AQAAAKYAAAAAAAAApgAAAAAAAAA9AAAAQSBjb2xsZWN0aW9uIG9mIGZpbGVzIGFuZCBmb2xkZXJzLCB3aGljaCBhcmUgc2hvd24gaW4gU2lkZWJhcg", - "AQAAAAAAAAABAAAApgAAAAAAAADjAAAAAAAAAAAAAAAAAPC/" - ], - [ - 57, - 1, - "paste", - null, - "AgAAAG4AAAAAAAAAqwAAAAAAAAAAAAAAqwAAAAAAAACrAAAAAAAAADEAAAB5b3VyIG5ldyBjb21tYW5kIC8gcGx1Z2luIGZvciB0aGUgQ29tbWFuZCBQYWxldHRl", - "AQAAAAAAAAABAAAAbgAAAAAAAACfAAAAAAAAAAAAAAAAAPC/" - ], - [ - 62, - 1, - "insert", - { - "characters": "a" - }, - "AwAAAG4AAAAAAAAAbwAAAAAAAAAAAAAAbwAAAAAAAABvAAAAAAAAAAEAAABBswAAAAAAAACzAAAAAAAAAAIAAAAgIA", - "AQAAAAAAAAABAAAAbwAAAAAAAABuAAAAAAAAAAAAAAAAAPC/" - ], - [ - 66, - 1, - "cut", - null, - "AQAAAK8AAAAAAAAArwAAAAAAAAABAAAACg", - "AQAAAAAAAAABAAAArwAAAAAAAACvAAAAAAAAAAAAAAAAAPC/" - ], - [ - 69, - 1, - "cut", - null, - "AQAAAK8AAAAAAAAArwAAAAAAAAADAAAAICAK", - "AQAAAAAAAAABAAAArwAAAAAAAACvAAAAAAAAAAAAAAAAAPC/" - ], - [ - 71, - 1, - "cut", - null, - "AQAAAK8AAAAAAAAArwAAAAAAAAABAAAACg", - "AQAAAAAAAAABAAAArwAAAAAAAACvAAAAAAAAAAAAAAAAAPC/" - ], - [ - 89, - 1, - "insert", - { - "characters": "60" - }, - "AwAAALsAAAAAAAAAvAAAAAAAAAAAAAAAvAAAAAAAAAC8AAAAAAAAAAEAAAAzvAAAAAAAAAC9AAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAvAAAAAAAAAC7AAAAAAAAAAAAAAAAAPC/" - ], - [ - 90, - 1, - "left_delete", - null, - "AQAAALwAAAAAAAAAvAAAAAAAAAABAAAAMA", - "AQAAAAAAAAABAAAAvQAAAAAAAAC9AAAAAAAAAAAAAAAAAPC/" - ], - [ - 145, - 2, - "right_delete", - null, - "BgAAAJMCAAAAAAAAkwIAAAAAAAABAAAAY9UBAAAAAAAA1QEAAAAAAAABAAAAYwYBAAAAAAAABgEAAAAAAAABAAAAY5ECAAAAAAAAkQIAAAAAAAABAAAAb9QBAAAAAAAA1AEAAAAAAAABAAAAbwYBAAAAAAAABgEAAAAAAAABAAAAbw", - "AQAAAAAAAAADAAAABgEAAAAAAAAGAQAAAAAAAAAAAAAAAPC/1QEAAAAAAADVAQAAAAAAAAAAAAAAAPC/kwIAAAAAAACTAgAAAAAAAAAAAAAAAPC/" - ], - [ - 146, - 1, - "paste", - null, - "AwAAAI8CAAAAAAAAlgIAAAAAAAAAAAAA0wEAAAAAAADaAQAAAAAAAAAAAAAGAQAAAAAAAA0BAAAAAAAAAAAAAA", - "AQAAAAAAAAADAAAABgEAAAAAAAAGAQAAAAAAAAAAAAAAAPC/0wEAAAAAAADTAQAAAAAAAAAAAAAAAPC/jwIAAAAAAACPAgAAAAAAAAAAAAAAAPC/" - ], - [ - 147, - 5, - "right_delete", - null, - "DwAAAKQCAAAAAAAApAIAAAAAAAABAAAAbeEBAAAAAAAA4QEAAAAAAAABAAAAbQ0BAAAAAAAADQEAAAAAAAABAAAAbaICAAAAAAAAogIAAAAAAAABAAAAbeABAAAAAAAA4AEAAAAAAAABAAAAbQ0BAAAAAAAADQEAAAAAAAABAAAAbaACAAAAAAAAoAIAAAAAAAABAAAAYd8BAAAAAAAA3wEAAAAAAAABAAAAYQ0BAAAAAAAADQEAAAAAAAABAAAAYZ4CAAAAAAAAngIAAAAAAAABAAAAbt4BAAAAAAAA3gEAAAAAAAABAAAAbg0BAAAAAAAADQEAAAAAAAABAAAAbpwCAAAAAAAAnAIAAAAAAAABAAAAZN0BAAAAAAAA3QEAAAAAAAABAAAAZA0BAAAAAAAADQEAAAAAAAABAAAAZA", - "AQAAAAAAAAADAAAADQEAAAAAAAANAQAAAAAAAAAAAAAAAPC/4QEAAAAAAADhAQAAAAAAAAAAAAAAAPC/pAIAAAAAAACkAgAAAAAAAAAAAAAAAPC/" - ], - [ - 149, - 1, - "left_delete", - null, - "AwAAAJMCAAAAAAAAkwIAAAAAAAABAAAAUNUBAAAAAAAA1QEAAAAAAAABAAAAUAYBAAAAAAAABgEAAAAAAAABAAAAUA", - "AQAAAAAAAAADAAAABwEAAAAAAAAHAQAAAAAAAAAAAAAAAPC/1gEAAAAAAADWAQAAAAAAAAAAAAAAAPC/lAIAAAAAAACUAgAAAAAAAAAAAAAAAPC/" - ], - [ - 150, - 1, - "insert", - { - "characters": "p" - }, - "AwAAAJECAAAAAAAAkgIAAAAAAAAAAAAA1AEAAAAAAADVAQAAAAAAAAAAAAAGAQAAAAAAAAcBAAAAAAAAAAAAAA", - "AQAAAAAAAAADAAAABgEAAAAAAAAGAQAAAAAAAAAAAAAAAPC/1AEAAAAAAADUAQAAAAAAAAAAAAAAAPC/kQIAAAAAAACRAgAAAAAAAAAAAAAAAPC/" - ], - [ - 176, - 2, - "left_delete", - null, - "AgAAAN4BAAAAAAAA3gEAAAAAAAADAAAAYW1l3QEAAAAAAADdAQAAAAAAAAEAAABu", - "AQAAAAAAAAABAAAA3gEAAAAAAADhAQAAAAAAAAAAAAAAAPC/" - ], - [ - 177, - 1, - "insert", - { - "characters": "path" - }, - "BAAAAN0BAAAAAAAA3gEAAAAAAAAAAAAA3gEAAAAAAADfAQAAAAAAAAAAAADfAQAAAAAAAOABAAAAAAAAAAAAAOABAAAAAAAA4QEAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAA3QEAAAAAAADdAQAAAAAAAAAAAAAAAPC/" - ], - [ - 192, - 1, - "cut", - null, - "AQAAAH0CAAAAAAAAfQIAAAAAAADaAAAAICAgIHsKICAgICAgbmFtZTogICAgJ3Byb2plY3RfY2FwdGlvbicsCiAgICAgIG1lc3NhZ2U6ICdXaGF0IGlzIHRoZSBjYXB0aW9uIG9mIHlvdXIgbmV3IGNvbW1hbmQgKGRlc2NyaXB0aW9uKT8nLAogICAgICB0eXBlOiAgICAnaW5wdXQnLAogICAgICBkZWZhdWx0OiAnJHtjb25maWcucGFja2FnZV9uYW1lX3Bhc2NhbF9jYXNlfSBpcyB0aGUgbmV3IGZlYXR1cmUuLi4nLAogICAgfSw", - "AQAAAAAAAAABAAAAVwMAAAAAAAB9AgAAAAAAAAAAAAAAAPC/" - ], - [ - 198, - 1, - "cut", - null, - "AQAAAH0CAAAAAAAAfQIAAAAAAAABAAAACg", - "AQAAAAAAAAABAAAAfQIAAAAAAAB9AgAAAAAAAAAAAAAAAPC/" - ], - [ - 216, - 1, - "paste", - null, - "BgAAABECAAAAAAAAGAIAAAAAAAAAAAAAGAIAAAAAAAAYAgAAAAAAAAcAAABjb21tYW5kVQEAAAAAAABcAQAAAAAAAAAAAABcAQAAAAAAAFwBAAAAAAAABwAAAGNvbW1hbmRHAQAAAAAAAE4BAAAAAAAAAAAAAE4BAAAAAAAATgEAAAAAAAAHAAAAY29tbWFuZA", - "AQAAAAAAAAADAAAARwEAAAAAAABOAQAAAAAAAAAAAAAAAPC/VQEAAAAAAABcAQAAAAAAAAAAAAAAAPC/EQIAAAAAAAAYAgAAAAAAAAAAAAAAAPC/" - ], - [ - 226, - 1, - "insert", - { - "characters": "path" - }, - "BQAAAAACAAAAAAAAAQIAAAAAAAAAAAAAAQIAAAAAAAABAgAAAAAAAAQAAABuYW1lAQIAAAAAAAACAgAAAAAAAAAAAAACAgAAAAAAAAMCAAAAAAAAAAAAAAMCAAAAAAAABAIAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAAAIAAAAAAAAEAgAAAAAAAAAAAAAAAPC/" - ], - [ - 227, - 1, - "insert", - { - "characters": " " - }, - "AQAAAAQCAAAAAAAABQIAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAABAIAAAAAAAAEAgAAAAAAAAAAAAAAAPC/" - ], - [ - 228, - 1, - "", - null, - "AQAAAAUCAAAAAAAABgIAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAABQIAAAAAAAAFAgAAAAAAAAAAAAAAAPC/" - ], - [ - 229, - 1, - "", - null, - "AQAAAAUCAAAAAAAABQIAAAAAAAACAAAAwrQ", - "AQAAAAAAAAABAAAABgIAAAAAAAAGAgAAAAAAAAAAAAAAAPC/" - ], - [ - 230, - 1, - "insert", - { - "characters": "´" - }, - "AQAAAAUCAAAAAAAABgIAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAABQIAAAAAAAAFAgAAAAAAAAAAAAAAAPC/" - ], - [ - 231, - 2, - "left_delete", - null, - "AgAAAAUCAAAAAAAABQIAAAAAAAACAAAAwrQEAgAAAAAAAAQCAAAAAAAAAQAAACA", - "AQAAAAAAAAABAAAABgIAAAAAAAAGAgAAAAAAAAAAAAAAAPC/" - ], - [ - 259, - 1, - "insert", - { - "characters": "7" - }, - "AgAAALsAAAAAAAAAvAAAAAAAAAAAAAAAvAAAAAAAAAC8AAAAAAAAAAEAAAA2", - "AQAAAAAAAAABAAAAuwAAAAAAAAC8AAAAAAAAAAAAAAAAAPC/" - ], - [ - 273, - 1, - "paste", - null, - "AgAAAFsCAAAAAAAAZgIAAAAAAAAAAAAAZgIAAAAAAABmAgAAAAAAABcAAABwYWNrYWdlX25hbWVfc25ha2VfY2FzZQ", - "AQAAAAAAAAABAAAAWwIAAAAAAAByAgAAAAAAAAAAAAAAAPC/" - ], - [ - 287, - 1, - "insert", - { - "characters": "wanted" - }, - "BwAAAA0CAAAAAAAADgIAAAAAAAAAAAAADgIAAAAAAAAOAgAAAAAAAAMAAABuZXcOAgAAAAAAAA8CAAAAAAAAAAAAAA8CAAAAAAAAEAIAAAAAAAAAAAAAEAIAAAAAAAARAgAAAAAAAAAAAAARAgAAAAAAABICAAAAAAAAAAAAABICAAAAAAAAEwIAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAADQIAAAAAAAAQAgAAAAAAAAAAAAAAAPC/" - ], - [ - 294, - 1, - "insert", - { - "characters": "folder" - }, - "BwAAABQCAAAAAAAAFQIAAAAAAAAAAAAAFQIAAAAAAAAVAgAAAAAAAAcAAABwcm9qZWN0FQIAAAAAAAAWAgAAAAAAAAAAAAAWAgAAAAAAABcCAAAAAAAAAAAAABcCAAAAAAAAGAIAAAAAAAAAAAAAGAIAAAAAAAAZAgAAAAAAAAAAAAAZAgAAAAAAABoCAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAFAIAAAAAAAAbAgAAAAAAAAAAAAAAAPC/" - ], - [ - 300, - 1, - "left_delete", - null, - "AQAAABoCAAAAAAAAGgIAAAAAAAAOAAAAIChwbHVnaW4gbmFtZSk", - "AQAAAAAAAAABAAAAGgIAAAAAAAAoAgAAAAAAAAAAAAAAAPC/" - ] - ] - }, - { - "file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/setting/config.js", - "settings": - { - "buffer_size": 435, - "encoding": "UTF-8", - "line_ending": "Unix" - }, - "undo_stack": - [ - [ - 4, - 1, - "insert", - { - "characters": "8" - }, - "AgAAAI8AAAAAAAAAkAAAAAAAAAAAAAAAkAAAAAAAAACQAAAAAAAAAAEAAAA3", - "AQAAAAAAAAABAAAAkAAAAAAAAACPAAAAAAAAAAAAAAAAAPC/" - ] - ] - }, - { - "file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/snippet/config.js", - "settings": - { - "buffer_size": 1217, - "encoding": "UTF-8", - "line_ending": "Unix" - }, - "undo_stack": - [ - [ - 5, - 1, - "left_delete", - null, - "AQAAALQAAAAAAAAAtAAAAAAAAAABAAAAOA", - "AQAAAAAAAAABAAAAtQAAAAAAAAC1AAAAAAAAAAAAAAAAAPC/" - ], - [ - 6, - 1, - "insert", - { - "characters": "9" - }, - "AQAAALQAAAAAAAAAtQAAAAAAAAAAAAAA", - "AQAAAAAAAAABAAAAtAAAAAAAAAC0AAAAAAAAAAAAAAAAAPC/" - ] - ] - }, - { - "contents": "Searching 56217 files for \"priority:\"\n\n~/workspace/tools/Znuny-PackageGenerator/__tests__/generators/widget_agent_customer_information_center.test.js:\n 18 module_name: 'MyCoffee',\n 19 module_description: 'Registers a TicketSearch hook that [...]',\n 20: priority: '200',\n 21 location: 'ContentLarge',\n 22 \n\n~/workspace/tools/Znuny-PackageGenerator/__tests__/generators/widget_agent_customer_user_information_center.test.js:\n 18 module_name: 'MyCoffee',\n 19 module_description: 'Registers a TicketSearch hook that [...]',\n 20: priority: '200',\n 21 location: 'ContentLarge',\n 22 \n\n~/workspace/tools/Znuny-PackageGenerator/__tests__/generators/widget_agent_ticket_zoom.test.js:\n 18 module_name: 'MyCoffee',\n 19 module_description: 'Registers a TicketSearch hook that [...]',\n 20: priority: '200',\n 21 location: 'ContentLarge',\n 22 \n\n~/workspace/tools/Znuny-PackageGenerator/__tests__/generators/widget_dashboard.test.js:\n 18 module_name: 'MyCoffee',\n 19 module_description: 'Registers a TicketSearch hook that [...]',\n 20: priority: '200',\n 21 location: 'ContentLarge',\n 22 \n\n~/workspace/tools/Znuny-PackageGenerator/__tests__/generators/xml_loader_common.test.js:\n 16 type: 'CSS',\n 17 active_interface: 'Agent',\n 18: priority: 999,\n 19 \n 20 // package_data\n ..\n 57 type: 'JS',\n 58 active_interface: 'Customer',\n 59: priority: 999,\n 60 \n 61 // package_data\n\n~/workspace/tools/Znuny-PackageGenerator/__tests__/generators/xml_loader_module.test.js:\n 14 // generator_data\n 15 module_name: 'MyCoffee',\n 16: priority: 999,\n 17 \n 18 // package_data\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/acl/config.js.html:\n 162  
const config = {\n  163    name: 'ACL',\n  164:   priority: 10,\n  165    versions: {\n  166      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/advanced_notification_event/config.js.html:\n  226   
const config = {\n  227    name: 'Advanced NotificationEvent \\t (Znuny4OTRS-AdvancedNotificationEvent)',\n  228:   priority: 10,\n  229    versions: {\n  230      '5.0.x': '5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/advanced_stats/config.js.html:\n  152  20x
const config = {\n  153    name: 'Advanced Stats \\t\\t (Znuny4OTRS-AdvancedStats)',\n  154:   priority: 10,\n  155    versions: {\n  156      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/advanced_ticket_search/config.js.html:\n  152   
const config = {\n  153    name: 'Advanced TicketSearch \\t (Znuny4OTRS-AdvancedTicketSearch)',\n  154:   priority: 10,\n  155    versions: {\n  156      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/agent_preferences/config.js.html:\n  124   
const config = {\n  125    name: 'Agent Preferences',\n  126:   priority: 10,\n  127    versions: {\n  128      '4.0.x': '4',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/article_action/config.js.html:\n  186   
const config = {\n  187    name: 'Article Action',\n  188:   priority: 10,\n  189    versions: {\n  190      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/autoload/config.js.html:\n  136  20x
const config = {\n  137    name: 'Autoload',\n  138:   priority: 10,\n  139    versions: {\n  140      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/bin_script/config.js.html:\n  120   
const config = {\n  121    name: 'Bin Script',\n  122:   priority: 20,\n  123    versions: {\n  124      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/config_module/config.js.html:\n  112   
const config = {\n  113    name: 'Config Module',\n  114:   priority: 30,\n  115    versions: {\n  116      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/console_command/config.js.html:\n  164   
const config = {\n  165    name: 'Console Command',\n  166:   priority: 30,\n  167    versions: {\n  168      '5.0.x': '5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/css/config.js.html:\n  156   
const config = {\n  157    name: 'CSS',\n  158:   priority: 30,\n  159    versions: {\n  160      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/dbcrud/config.js.html:\n  362   
const config = {\n  363    name: 'DBCRUD \\t\\t\\t (DatabaseBackend)',\n  364:   priority: 40,\n  365    versions: {\n  366      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/dbcrud_admin/config.js.html:\n  150   
const config = {\n  151    name: 'DBCRUD Admin\\t\\t\\t (DatabaseBackend)',\n  152:   priority: 40,\n  153    versions: {\n  154      '5.0.x': '5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/dbcrud_event/config.js.html:\n  264   
const config = {\n  265    name: 'DBCRUD Event \\t\\t (DatabaseBackend)',\n  266:   priority: 40,\n  267    versions: {\n  268      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/documentation/config.js.html:\n  134  20x
const config = {\n  135    name: 'Documentation',\n  136:   priority: 3,\n  137    versions: {\n  138      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/dynamic_field_driver/config.js.html:\n  124   
const config = {\n  125    name: 'DynamicField Driver',\n  126:   priority: 40,\n  127    versions: {\n  128      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/dynamic_field_history/config.js.html:\n  112  20x
const config = {\n  113    name: 'DynamicField History \\t (Znuny4OTRS-DynamicFieldHistory)',\n  114:   priority: 40,\n  115    versions: {\n  116      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/dynamic_field_screen/config.js.html:\n  174   
const config = {\n  175    name: 'DynamicField Screen \\t\\t (Znuny4OTRS-AdvancedDynamicFields)',\n  176:   priority: 40,\n  177    versions: {\n  178      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/event/config.js.html:\n  838   
const config = {\n  839    name: 'Event',\n  840:   priority: 50,\n  841    versions: {\n  842      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/frontend_module_admin/config.js.html:\n  208   
const config = {\n  209    name: 'Frontend Module Admin',\n  210:   priority: 60,\n  211    versions: {\n  212      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/frontend_module_agent/config.js.html:\n  208   
const config = {\n  209    name: 'Frontend Module Agent',\n  210:   priority: 60,\n  211    versions: {\n  212      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/frontend_module_ajax/config.js.html:\n  166   
const config = {\n  167    name: 'Frontend Module Ajax',\n  168:   priority: 60,\n  169    versions: {\n  170      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/frontend_module_customer/config.js.html:\n  184   
const config = {\n  185    name: 'Frontend Module Customer',\n  186:   priority: 60,\n  187    versions: {\n  188      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/generic_agent/config.js.html:\n  122  20x
const config = {\n  123    name: 'Generic Agent',\n  124:   priority: 70,\n  125    versions: {\n  126      '4.0.x': '4-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/generic_interface_invoker/config.js.html:\n  128   
const config = {\n  129    name: 'GenericInterface Invoker',\n  130:   priority: 70,\n  131    versions: {\n  132      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/generic_interface_operation/config.js.html:\n  128   
const config = {\n  129    name: 'GenericInterface Operation',\n  130:   priority: 70,\n  131    versions: {\n  132      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/generic_interface_transport/config.js.html:\n  150   
const config = {\n  151    name: 'GenericInterface Transport',\n  152:   priority: 70,\n  153    versions: {\n  154      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/gitlab_ci/config.js.html:\n  194   
const config = {\n  195    name: 'GitLab CI',\n  196:   priority: 4,\n  197    versions: {\n  198      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/javascript/config.js.html:\n  160  20x
const config = {\n  161    name: 'JavaScript',\n  162:   priority: 100,\n  163    versions: {\n  164      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/javascript_unit_test/config.js.html:\n  108  20x
const config = {\n  109    name: 'JavaScriptUnitTest',\n  110:   priority: 100,\n  111    versions: {\n  112      '5.0.x': '5-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/language/config.js.html:\n  114   
const config = {\n  115    name: 'Language',\n  116:   priority: 50,\n  117    versions: {\n  118      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/layout/config.js.html:\n   98   
const config = {\n   99    name: 'Layout',\n  100:   priority: 20,\n  101    versions: {\n  102      '4.0.x': '4',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/notification_banner/config.js.html:\n  136  20x
const config = {\n  137    name: 'Notification Banner',\n  138:   priority: 140,\n  139    versions: {\n  140      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/output_filter/config.js.html:\n  394  20x
const config = {\n  395    name: 'OutputFilter',\n  396:   priority: 150,\n  397    versions: {\n  398      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/package_setup/config.js.html:\n  414  20x
const config = {\n  415    name: 'PackageSetup',\n  416:   priority: 160,\n  417    versions: {\n  418      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/package_setup_substructure/config.js.html:\n   92  20x
const config = {\n   93    name: 'PackageSetup Substructure',\n   94:   priority: 160,\n   95    versions: {\n   96      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/postmaster_filter/config.js.html:\n  170   
const config = {\n  171    name: 'Postmaster Filter',\n  172:   priority: 160,\n  173    versions: {\n  174      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/process_management_transition_action/config.js.html:\n  124   
const config = {\n  125    name: 'ProcessManagement TransitionAction',\n  126:   priority: 160,\n  127    versions: {\n  128      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/process_management_transition_validation/config.js.html:\n  124  20x
const config = {\n  125    name: 'ProcessManagement TransitionValidation',\n  126:   priority: 160,\n  127    versions: {\n  128      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/queue_preferences/config.js.html:\n  182   
const config = {\n  183    name: 'QueuePreferences',\n  184:   priority: 170,\n  185    versions: {\n  186      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/readme/config.js.html:\n  112  20x
const config = {\n  113    name: 'README.md',\n  114:   priority: 5,\n  115    versions: {\n  116      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/scheduler_task_worker/config.js.html:\n  122  20x
const config = {\n  123    name: 'SchedulerTaskWorker',\n  124:   priority: 190,\n  125    versions: {\n  126      '4.0.x': '4',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/selenium_test/config.js.html:\n  190  20x
const config = {\n  191    name: 'SeleniumTest',\n  192:   priority: 190,\n  193    versions: {\n  194      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/skin/config.js.html:\n  218   
const config = {\n  219    name: 'Skin',\n  220:   priority: 190,\n  221    versions: {\n  222      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/sopm/config.js.html:\n  130  20x
const config = {\n  131    name: 'SOPM',\n  132:   priority: 1,\n  133    versions: {\n  134      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/sopm_code/config.js.html:\n  164  20x
const config = {\n  165    name: 'SOPM Code',\n  166:   priority: 190,\n  167    versions: {\n  168      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/sopm_database/config.js.html:\n  136   
const config = {\n  137    name: 'SOPM Database',\n  138:   priority: 190,\n  139    versions: {\n  140      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/sopm_module_required/config.js.html:\n  126   
const config = {\n  127    name: 'SOPM Module Required',\n  128:   priority: 190,\n  129    versions: {\n  130      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/sopm_package_required/config.js.html:\n  124  20x
const config = {\n  125    name: 'SOPM Package Required',\n  126:   priority: 190,\n  127    versions: {\n  128      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/system/config.js.html:\n  110  20x
const config = {\n  111    name: 'System',\n  112:   priority: 190,\n  113    versions: {\n  114      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/ticket_custom_module/config.js.html:\n  136  20x
const config = {\n  137    name: 'Ticket CustomModule (redefine of Ticket Function)',\n  138:   priority: 200,\n  139    versions: {\n  140      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/ticket_menu/config.js.html:\n  176  20x
const config = {\n  177    name: 'TicketMenu',\n  178:   priority: 50,\n  179    versions: {\n  180      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/unit_test/config.js.html:\n  110  20x
const config = {\n  111    name: 'UnitTest',\n  112:   priority: 210,\n  113    versions: {\n  114      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/webservice/config.js.html:\n  208   
const config = {\n  209    name: 'Webservice (yaml)',\n  210:   priority: 230,\n  211    versions: {\n  212      '3.3.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/widget_agent_customer_information_center/config.js.html:\n  150  20x
const config = {\n  151    name: 'Widget AgentCustomerInformationCenter',\n  152:   priority: 230,\n  153    versions: {\n  154      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/widget_agent_customer_user_information_center/config.js.html:\n  150  20x
const config = {\n  151    name: 'Widget AgentCustomerUserInformationCenter',\n  152:   priority: 230,\n  153    versions: {\n  154      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/widget_agent_ticket_zoom/config.js.html:\n  176  20x
const config = {\n  177    name: 'Widget AgentTicketZoom',\n  178:   priority: 230,\n  179    versions: {\n  180      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/widget_dashboard/config.js.html:\n  150  20x
const config = {\n  151    name: 'Widget Dashboard',\n  152:   priority: 230,\n  153    versions: {\n  154      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/xml_acl_keys_level3_actions/config.js.html:\n  112  20x
const config = {\n  113    name: 'XML ACLKeysLevel3::Actions',\n  114:   priority: 240,\n  115    versions: {\n  116      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/xml_config_file/config.js.html:\n   96  20x
const config = {\n   97    name:     'XML Config File',\n   98:   priority: 2,\n   99    versions: {\n  100      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/xml_loader_common/config.js.html:\n  184  20x
const config = {\n  185    name: 'XML Loader Common',\n  186:   priority: 240,\n  187    versions: {\n  188      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/xml_loader_module/config.js.html:\n  118  21x
const config = {\n  119    name: 'XML Loader Module',\n  120:   priority: 240,\n  121    versions: {\n  122      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/generators/xml_scheduler_cron_task_manager/config.js.html:\n  146   
const config = {\n  147    name: 'XML SchedulerCronTaskManager::Task (Daemon::SchedulerCronTaskManager::Task)',\n  148:   priority: 240,\n  149    versions: {\n  150      '5.0.x': '5',\n\n~/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/src/helper.js.html:\n 1472          value:   generator,\n 1473          checked: false,\n 1474:         priority: generator_config.priority || 50,\n 1475        };\n 1476   \n\n~/workspace/tools/Znuny-PackageGenerator/generators/__subgenerator__/config.js:\n    1  const config = {\n    2    name: 'Znuny-PackageGenerator SubGenerator',\n    3:   priority: 1,\n    4    versions: {\n    5      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/__subgenerator__/templates/config.js:\n    1  let config = {\n    2    name: '<%= generator_label %>',\n    3:   priority: <%= generator_priority %>,\n    4    versions: {\n    5      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/acl/config.js:\n    1  const config = {\n    2    name: 'ACL',\n    3:   priority: 10,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/advanced_notification_event/config.js:\n    1  const config = {\n    2    name: 'Advanced NotificationEvent \\t (Znuny4OTRS-AdvancedNotificationEvent)',\n    3:   priority: 10,\n    4    versions: {\n    5      '5.0.x': '5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/advanced_stats/config.js:\n    1  const config = {\n    2    name: 'Advanced Stats \\t\\t (Znuny4OTRS-AdvancedStats)',\n    3:   priority: 10,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/advanced_ticket_search/config.js:\n    1  const config = {\n    2    name: 'Advanced TicketSearch \\t (Znuny4OTRS-AdvancedTicketSearch)',\n    3:   priority: 10,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/agent_preferences/config.js:\n    1  const config = {\n    2    name: 'Agent Preferences',\n    3:   priority: 10,\n    4    versions: {\n    5      '4.0.x': '4',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/article_action/config.js:\n    1  const config = {\n    2    name: 'Article Action',\n    3:   priority: 10,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/autoload/config.js:\n    1  const config = {\n    2    name: 'Autoload',\n    3:   priority: 10,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/bin_script/config.js:\n    1  const config = {\n    2    name: 'Bin Script',\n    3:   priority: 20,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/config_module/config.js:\n    1  const config = {\n    2    name: 'Config Module',\n    3:   priority: 30,\n    4    versions: {\n    5      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/console_command/config.js:\n    1  const config = {\n    2    name: 'Console Command',\n    3:   priority: 30,\n    4    versions: {\n    5      '5.0.x': '5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/css/config.js:\n    1  const config = {\n    2    name: 'CSS',\n    3:   priority: 30,\n    4    versions: {\n    5      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/dbcrud/config.js:\n    1  const config = {\n    2    name: 'DBCRUD \\t\\t\\t (DatabaseBackend)',\n    3:   priority: 40,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/dbcrud_admin/config.js:\n    1  const config = {\n    2    name: 'DBCRUD Admin\\t\\t\\t (DatabaseBackend)',\n    3:   priority: 40,\n    4    versions: {\n    5      '5.0.x': '5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/dbcrud_event/config.js:\n    1  const config = {\n    2    name: 'DBCRUD Event \\t\\t (DatabaseBackend)',\n    3:   priority: 40,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/documentation/config.js:\n    1  const config = {\n    2    name: 'Documentation',\n    3:   priority: 3,\n    4    versions: {\n    5      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/dynamic_field_driver/config.js:\n    1  const config = {\n    2    name: 'DynamicField Driver',\n    3:   priority: 40,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/dynamic_field_history/config.js:\n    1  const config = {\n    2    name: 'DynamicField History \\t (Znuny4OTRS-DynamicFieldHistory)',\n    3:   priority: 40,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/dynamic_field_screen/config.js:\n    1  const config = {\n    2    name: 'DynamicField Screen \\t\\t (Znuny4OTRS-AdvancedDynamicFields)',\n    3:   priority: 40,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/event/config.js:\n    1  const config = {\n    2    name: 'Event',\n    3:   priority: 50,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/frontend_module_admin/config.js:\n    1  const config = {\n    2    name: 'Frontend Module Admin',\n    3:   priority: 60,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/frontend_module_agent/config.js:\n    1  const config = {\n    2    name: 'Frontend Module Agent',\n    3:   priority: 60,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/frontend_module_ajax/config.js:\n    1  const config = {\n    2    name: 'Frontend Module Ajax',\n    3:   priority: 60,\n    4    versions: {\n    5      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/frontend_module_customer/config.js:\n    1  const config = {\n    2    name: 'Frontend Module Customer',\n    3:   priority: 60,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/generic_agent/config.js:\n    1  const config = {\n    2    name: 'Generic Agent',\n    3:   priority: 70,\n    4    versions: {\n    5      '4.0.x': '4-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/generic_interface_invoker/config.js:\n    1  const config = {\n    2    name: 'GenericInterface Invoker',\n    3:   priority: 70,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/generic_interface_mapping/config.js:\n    1  const config = {\n    2    name: 'GenericInterface Mapping',\n    3:   priority: 70,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/generic_interface_operation/config.js:\n    1  const config = {\n    2    name: 'GenericInterface Operation',\n    3:   priority: 70,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/generic_interface_transport/config.js:\n    1  const config = {\n    2    name: 'GenericInterface Transport',\n    3:   priority: 70,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/gitlab_ci/config.js:\n    1  const config = {\n    2    name: 'GitLab CI',\n    3:   priority: 4,\n    4    versions: {\n    5      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/javascript/config.js:\n    1  const config = {\n    2    name: 'JavaScript',\n    3:   priority: 100,\n    4    versions: {\n    5      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/javascript_unit_test/config.js:\n    1  const config = {\n    2    name: 'JavaScriptUnitTest',\n    3:   priority: 100,\n    4    versions: {\n    5      '5.0.x': '5-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/language/config.js:\n    1  const config = {\n    2    name: 'Language',\n    3:   priority: 50,\n    4    versions: {\n    5      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/layout/config.js:\n    1  const config = {\n    2    name: 'Layout',\n    3:   priority: 20,\n    4    versions: {\n    5      '4.0.x': '4',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/notification_banner/config.js:\n    1  const config = {\n    2    name: 'Notification Banner',\n    3:   priority: 140,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/output_filter/config.js:\n    1  const config = {\n    2    name: 'OutputFilter',\n    3:   priority: 150,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/package_setup/config.js:\n    1  const config = {\n    2    name: 'PackageSetup',\n    3:   priority: 160,\n    4    versions: {\n    5      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/package_setup_substructure/config.js:\n    1  const config = {\n    2    name: 'PackageSetup Substructure',\n    3:   priority: 160,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/postmaster_filter/config.js:\n    1  const config = {\n    2    name: 'Postmaster Filter',\n    3:   priority: 160,\n    4    versions: {\n    5      '3.3.x': '3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/pre_application/config.js:\n    1  const config = {\n    2    name: 'PreApplication',\n    3:   priority: 160,\n    4    versions: {\n    5      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/process_management_transition_action/config.js:\n    1  const config = {\n    2    name: 'ProcessManagement TransitionAction',\n    3:   priority: 160,\n    4    versions: {\n    5      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/process_management_transition_validation/config.js:\n    1  const config = {\n    2    name: 'ProcessManagement TransitionValidation',\n    3:   priority: 160,\n    4    versions: {\n    5      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/queue_preferences/config.js:\n    1  const config = {\n    2    name: 'QueuePreferences',\n    3:   priority: 170,\n    4    versions: {\n    5      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/readme/config.js:\n    1  const config = {\n    2    name: 'README.md',\n    3:   priority: 5,\n    4    versions: {\n    5      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/scheduler_task_worker/config.js:\n    1  const config = {\n    2    name: 'SchedulerTaskWorker',\n    3:   priority: 190,\n    4    versions: {\n    5      '4.0.x': '4',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/selenium_test/config.js:\n    1  const config = {\n    2    name: 'SeleniumTest',\n    3:   priority: 190,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/skin/config.js:\n    1  const config = {\n    2    name: 'Skin',\n    3:   priority: 190,\n    4    versions: {\n    5      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/sopm/config.js:\n    1  const config = {\n    2    name: 'SOPM',\n    3:   priority: 1,\n    4    versions: {\n    5      '3.3.x': '',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/sopm_code/config.js:\n    1  const config = {\n    2    name: 'SOPM Code',\n    3:   priority: 190,\n    4    versions: {\n    5      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/sopm_database/config.js:\n    1  const config = {\n    2    name: 'SOPM Database',\n    3:   priority: 190,\n    4    versions: {\n    5      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/sopm_module_required/config.js:\n    1  const config = {\n    2    name: 'SOPM Module Required',\n    3:   priority: 190,\n    4    versions: {\n    5      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/sopm_package_required/config.js:\n    1  const config = {\n    2    name: 'SOPM Package Required',\n    3:   priority: 190,\n    4    versions: {\n    5      '3.3.x': '3-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/system/config.js:\n    1  const config = {\n    2    name: 'System',\n    3:   priority: 190,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/ticket_custom_module/config.js:\n    1  const config = {\n    2    name: 'Ticket CustomModule (redefine of Ticket Function)',\n    3:   priority: 200,\n    4    versions: {\n    5      '3.3.x': '3.3',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/ticket_menu/config.js:\n    1  const config = {\n    2    name: 'TicketMenu',\n    3:   priority: 50,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/unit_test/config.js:\n    1  const config = {\n    2    name: 'UnitTest',\n    3:   priority: 210,\n    4    versions: {\n    5      '4.0.x': '4-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/webservice/config.js:\n    1  const config = {\n    2    name: 'Webservice (yaml)',\n    3:   priority: 230,\n    4    versions: {\n    5      '3.3.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/widget_agent_customer_information_center/config.js:\n    1  const config = {\n    2    name: 'Widget AgentCustomerInformationCenter',\n    3:   priority: 230,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/widget_agent_customer_user_information_center/config.js:\n    1  const config = {\n    2    name: 'Widget AgentCustomerUserInformationCenter',\n    3:   priority: 230,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/widget_agent_ticket_zoom/config.js:\n    1  const config = {\n    2    name: 'Widget AgentTicketZoom',\n    3:   priority: 230,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/widget_dashboard/config.js:\n    1  const config = {\n    2    name: 'Widget Dashboard',\n    3:   priority: 230,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/xml_acl_keys_level3_actions/config.js:\n    1  const config = {\n    2    name: 'XML ACLKeysLevel3::Actions',\n    3:   priority: 240,\n    4    versions: {\n    5      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/xml_config_file/config.js:\n    1  const config = {\n    2    name:     'XML Config File',\n    3:   priority: 2,\n    4    versions: {\n    5      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/xml_loader_common/config.js:\n    1  const config = {\n    2    name: 'XML Loader Common',\n    3:   priority: 240,\n    4    versions: {\n    5      '3.3.x': '3-5',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/xml_loader_module/config.js:\n    1  const config = {\n    2    name: 'XML Loader Module',\n    3:   priority: 240,\n    4    versions: {\n    5      '6.0.x': '6-x',\n\n~/workspace/tools/Znuny-PackageGenerator/generators/xml_scheduler_cron_task_manager/config.js:\n    1  const config = {\n    2    name: 'XML SchedulerCronTaskManager::Task (Daemon::SchedulerCronTaskManager::Task)',\n    3:   priority: 240,\n    4    versions: {\n    5      '5.0.x': '5',\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js.map:\n    1:  ...traverse\\\";\\nimport type { Statement } from \\\"@babel/types\\\";\\nimport type { PluginObject } from \\\"../config/index.ts\\\";\\nimport Plugin from \\\"../config/plugin.ts\\\";\\n\\nlet LOADED_PLUGIN: Plugin | void;\\n\\nconst blockHoistPlugin: PluginObject = {\\n  /**\\n   * [Please add a description.]\\n   *\\n   * Priority:\\n   *\\n   *  - 0 We want this to be at the **very** bottom\\n   *  - 1 Default node position\\n   *  - 2 Priority over normal nodes\\n   *  - 3 We want this to be at the **very** top\\n   *  - 4 Reserved for the helpers used to implement module imports.\\n   */\\n\\n  name: \\\"internal.blockHoist\\\",\\n\\n  v...  ...\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/child_process.d.ts:\n  409           * Similarly, the `sendHandler` argument can be used to pass the handle of a\n  410           * socket to the child process. The example below spawns two children that each\n  411:          * handle connections with \"normal\" or \"special\" priority:\n  412           *\n  413           * ```js\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/dns.d.ts:\n  206      }\n  207      export interface MxRecord {\n  208:         priority: number;\n  209          exchange: string;\n  210      }\n  ...\n  236      }\n  237      export interface SrvRecord {\n  238:         priority: number;\n  239          weight: number;\n  240          port: number;\n  ...\n  440      /**\n  441       * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. The `addresses` argument passed to the `callback` function will\n  442:      * contain an array of objects containing both a `priority` and `exchange`property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`).\n  443       * @since v0.1.27\n  444       */\n  ...\n  548       * ```js\n  549       * {\n  550:      *   priority: 10,\n  551       *   weight: 5,\n  552       *   port: 21223,\n  ...\n  591       * [ { type: 'A', address: '127.0.0.1', ttl: 299 },\n  592       *   { type: 'CNAME', value: 'example.com' },\n  593:      *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },\n  594       *   { type: 'NS', value: 'ns1.example.com' },\n  595       *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/http2.d.ts:\n 2067          const NGHTTP2_FLAG_ACK: number;\n 2068          const NGHTTP2_FLAG_PADDED: number;\n 2069:         const NGHTTP2_FLAG_PRIORITY: number;\n 2070          const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;\n 2071          const DEFAULT_SETTINGS_ENABLE_PUSH: number;\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/os.d.ts:\n  471       * @param priority The scheduling priority to assign to the process.\n  472       */\n  473:     function setPriority(priority: number): void;\n  474:     function setPriority(pid: number, priority: number): void;\n  475  }\n  476  declare module \"node:os\" {\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/dns/promises.d.ts:\n  174       * [ { type: 'A', address: '127.0.0.1', ttl: 299 },\n  175       *   { type: 'CNAME', value: 'example.com' },\n  176:      *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },\n  177       *   { type: 'NS', value: 'ns1.example.com' },\n  178       *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },\n  ...\n  205      /**\n  206       * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects\n  207:      * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`).\n  208       * @since v10.6.0\n  209       */\n  ...\n  283       * ```js\n  284       * {\n  285:      *   priority: 10,\n  286       *   weight: 5,\n  287       *   port: 21223,\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/ts4.8/child_process.d.ts:\n  409           * Similarly, the `sendHandler` argument can be used to pass the handle of a\n  410           * socket to the child process. The example below spawns two children that each\n  411:          * handle connections with \"normal\" or \"special\" priority:\n  412           *\n  413           * ```js\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/ts4.8/dns.d.ts:\n  206      }\n  207      export interface MxRecord {\n  208:         priority: number;\n  209          exchange: string;\n  210      }\n  ...\n  236      }\n  237      export interface SrvRecord {\n  238:         priority: number;\n  239          weight: number;\n  240          port: number;\n  ...\n  440      /**\n  441       * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. The `addresses` argument passed to the `callback` function will\n  442:      * contain an array of objects containing both a `priority` and `exchange`property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`).\n  443       * @since v0.1.27\n  444       */\n  ...\n  548       * ```js\n  549       * {\n  550:      *   priority: 10,\n  551       *   weight: 5,\n  552       *   port: 21223,\n  ...\n  591       * [ { type: 'A', address: '127.0.0.1', ttl: 299 },\n  592       *   { type: 'CNAME', value: 'example.com' },\n  593:      *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },\n  594       *   { type: 'NS', value: 'ns1.example.com' },\n  595       *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/ts4.8/http2.d.ts:\n 2067          const NGHTTP2_FLAG_ACK: number;\n 2068          const NGHTTP2_FLAG_PADDED: number;\n 2069:         const NGHTTP2_FLAG_PRIORITY: number;\n 2070          const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;\n 2071          const DEFAULT_SETTINGS_ENABLE_PUSH: number;\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/ts4.8/os.d.ts:\n  471       * @param priority The scheduling priority to assign to the process.\n  472       */\n  473:     function setPriority(priority: number): void;\n  474:     function setPriority(pid: number, priority: number): void;\n  475  }\n  476  declare module \"node:os\" {\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/@types/node/ts4.8/dns/promises.d.ts:\n  174       * [ { type: 'A', address: '127.0.0.1', ttl: 299 },\n  175       *   { type: 'CNAME', value: 'example.com' },\n  176:      *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },\n  177       *   { type: 'NS', value: 'ns1.example.com' },\n  178       *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },\n  ...\n  205      /**\n  206       * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects\n  207:      * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`).\n  208       * @since v10.6.0\n  209       */\n  ...\n  283       * ```js\n  284       * {\n  285:      *   priority: 10,\n  286       *   weight: 5,\n  287       *   port: 21223,\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/async/dist/async.js:\n 1028                  var item = {\n 1029                      data: task,\n 1030:                     priority: priority,\n 1031                      callback: typeof callback === 'function' ? callback : noop\n 1032                  };\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/async/dist/async.min.js:\n    1:  ...=-1,u=n.length-1;u>r;){var i=r+(u-r+1>>>1);e(t,n[i])>=0?r=i:u=i-1}return r}function i(t,e,i,o){if(null!=o&&\"function\"!=typeof o)throw new Error(\"task callback must be a function\");return t.started=!0,M(e)||(e=[e]),0===e.length?P.setImmediate(function(){t.drain()}):void c(e,function(e){var c={data:e,priority:i,callback:\"function\"==typeof o?o:n};t.tasks.splice(u(t.tasks,c,r)+1,0,c),t.tasks.length===t.concurrency&&t.saturated(),P.setImmediate(t.process)})}var o=P.queue(t,e);return o.push=function(n,t,e){i(o,n,t,e)},delete o.unshift,o},P.cargo=function(n,t){return I(n,1,t)},P.log=x(\"log\"),P.dir=x(\"dir\"),P....  ...\n    2  //# sourceMappingURL=dist/async.min.map\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/async/lib/async.js:\n 1028                  var item = {\n 1029                      data: task,\n 1030:                     priority: priority,\n 1031                      callback: typeof callback === 'function' ? callback : noop\n 1032                  };\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/cssom/lib/CSSStyleDeclaration.js:\n   91    * @param {String} name\n   92    */\n   93:  getPropertyPriority: function(name) {\n   94       return this._importants[name] || \"\";\n   95   },\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/cssstyle/lib/CSSStyleDeclaration.js:\n  130     * @param {String} name\n  131     */\n  132:   getPropertyPriority: function(name) {\n  133      return this._importants[name] || '';\n  134    },\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/cssstyle/node_modules/cssom/lib/CSSStyleDeclaration.js:\n   91    * @param {String} name\n   92    */\n   93:  getPropertyPriority: function(name) {\n   94       return this._importants[name] || \"\";\n   95   },\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/istanbul-reports/lib/html-spa/assets/bundle.js:\n   20   * This source code is licensed under the MIT license found in the\n   21   * LICENSE file in the root directory of this source tree.\n   22:  ...eking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",Ye,\"transitionEnd\",\"waiting\",\"waiting\"];function Vt(e,t){for(var n=0;n ...\n   23  /** @license React v0.19.1\n   24   * scheduler.production.min.js\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/jake/node_modules/async/dist/async.min.js:\n    1:  ...(t),e,n)}function $(e,t){var n=c(e);return B((e,t)=>{n(e[0],t)},t,1)}function ee(e){return(e<<1)+1}function te(e){return(e+1>>1)-1}function ne(e,t){return e.priority===t.priority?e.pushCount({data:e,priority:t})):{data:e,priority:t}}var a=$(e,t),{push:i,pushAsync:r}=a;return a._tasks=new ht,a._createTaskItem=({data:e,priority:t},n)=>({data:e,priority:t,callback:n}),a.push=function(e,t=0,a){return i(n(e,t),a)},a.pushAsync=function(e,t=0,a){return r(n(e,t),a)},delete a.unshift,delete a.unshiftAsync,a}function ie(e,t,n,a){var i=[...e].reverse();return qe(i,t,n,a)}function re(e){var t=c(e);return n(function a(e,n){return e.push((e,...t)=>{let a={};i...  ...\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/mem-fs/node_modules/@types/node/dns.d.ts:\n   84  \n   85      export interface MxRecord {\n   86:         priority: number;\n   87          exchange: string;\n   88      }\n   ..\n  120  \n  121      export interface SrvRecord {\n  122:         priority: number;\n  123          weight: number;\n  124          port: number;\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/mem-fs/node_modules/@types/node/http2.d.ts:\n  772          const NGHTTP2_FLAG_ACK: number;\n  773          const NGHTTP2_FLAG_PADDED: number;\n  774:         const NGHTTP2_FLAG_PRIORITY: number;\n  775          const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;\n  776          const DEFAULT_SETTINGS_ENABLE_PUSH: number;\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/mem-fs/node_modules/@types/node/os.d.ts:\n  231       * @param priority Must be in range of -20 to 19\n  232       */\n  233:     function setPriority(priority: number): void;\n  234      /**\n  235       * Sets the priority of the process specified process.\n  236       * @param priority Must be in range of -20 to 19\n  237       */\n  238:     function setPriority(pid: number, priority: number): void;\n  239  }\n  240  \n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/node-notifier/README.md:\n  305    sticky: false,\n  306    label: undefined,\n  307:   priority: undefined\n  308  });\n  309  ```\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/p-queue/readme.md:\n  173  const queue = new PQueue();\n  174  \n  175: queue.add(async () => '🦄', {priority: 1});\n  176: queue.add(async () => '🦄', {priority: 0});\n  177: queue.add(async () => '🦄', {priority: 1});\n  178  \n  179: console.log(queue.sizeBy({priority: 1}));\n  180  //=> 2\n  181  \n  182: console.log(queue.sizeBy({priority: 0}));\n  183  //=> 1\n  184  ```\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/p-queue/dist/priority-queue.js:\n    7      }\n    8      enqueue(run, options) {\n    9:         options = Object.assign({ priority: 0 }, options);\n   10          const element = {\n   11:             priority: options.priority,\n   12              run\n   13          };\n\n~/workspace/tools/Znuny-PackageGenerator/node_modules/prettier/parser-typescript.js:\n    1:  ...length;i++){var a=n[i];if(t===a.typeParameter)return r&&!a.isFixed&&(_d(n),a.isFixed=!0),Fd(e,i)}return t}function _d(e){for(var t=0,r=e;t ...){var i=e.getOriginalNode(t,e.isAccessExpression),a=e.isPropertyAccessExpression(i)?e.declarationNameToString(i.name):e.getTextOfNode(i.argumentExpression);e.addSyntheticTrailingComment(n,3,\" \"+a+\" \")}return n}return t}},e.decorateHelper={name:\"typescript:decorate\",importName:\"__decorate\",scoped:!1,priority:2,text:'\\n            var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\\n                var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\\n                if (typeof Reflect === \"objec...  ...tors.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\\n            };'},e.metadataHelper={name:\"typescript:metadata\",importName:\"__metadata\",scoped:!1,priority:3,text:'\\n            var __metadata = (this && this.__metadata) || function (k, v) {\\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\\n            };'},e.paramHelper={name:\"typescript:param\",importName:\"__param\",scoped:!1,priority:4,text:\"\\n            var __param = (this && this.__param) || function (paramIndex, decorator) {\\n                return function (target, key) { decorator(target, key, paramIndex); }\\n            };\"}}(s||(s={})),function(e){var r;!function(e){e[e.ClassAliases=1]=\"ClassAliases\"}(r||(r={})),e.transf...  ...ccess(e.createCall(e.createFileLevelUniqueName(\"_superIndex\"),void 0,[r]),\"value\"),n):e.setTextRange(e.createCall(e.createFileLevelUniqueName(\"_superIndex\"),void 0,[r]),n)):t;var r,n}},e.createSuperAccessVariableStatement=n,e.awaiterHelper={name:\"typescript:awaiter\",importName:\"__awaiter\",scoped:!1,priority:5,text:'\\n            var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n                function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\\n                return new (P || (P = Promise))(function (re...  ...gumentExpression,n=t,4096&b?e.setTextRange(e.createPropertyAccess(e.createCall(e.createIdentifier(\"_superIndex\"),void 0,[r]),\"value\"),n):e.setTextRange(e.createCall(e.createIdentifier(\"_superIndex\"),void 0,[r]),n)):t;var r,n}},e.assignHelper={name:\"typescript:assign\",importName:\"__assign\",scoped:!1,priority:1,text:\"\\n            var __assign = (this && this.__assign) || function () {\\n                __assign = Object.assign || function(t) {\\n                    for (var s, i = 1, n = arguments.length; i < n; i++) {\\n                        s = arguments[i];\\n                        for (var p in s) if...  ...ion(163),r.enableEmitNotification(201),r.enableEmitNotification(200),r.enableEmitNotification(243))}function Ae(t,r){return e.hasModifier(r,32)?e.getInternalName(t):e.createPropertyAccess(e.getInternalName(t),\"prototype\")}},e.extendsHelper={name:\"typescript:extends\",importName:\"__extends\",scoped:!1,priority:0,text:\"\\n            var __extends = (this && this.__extends) || (function () {\\n                var extendStatics = function (d, b) {\\n                    extendStatics = Object.setPrototypeOf ||\\n                        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ...  ...       function __() { this.constructor = d; }\\n                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n                };\\n            })();\"},e.templateObjectHelper={name:\"typescript:makeTemplateObject\",importName:\"__makeTemplateObject\",scoped:!1,priority:0,text:'\\n            var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\\n                if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\\n                return cooked;\\n            };'}}(s||(s={...  ...Ae(e.setTextRange(e.createThrow(t),r))}(n[0],l)}}}}function Ae(e){e&&(A?A.push(e):A=[e])}function Fe(t,r){C=!0,k=!0,Ae(e.setEmitFlags(e.setTextRange(e.createReturn(e.createArrayLiteral(t?[me(2),t]:[me(2)])),r),384))}},e.generatorHelper={name:\"typescript:generator\",importName:\"__generator\",scoped:!1,priority:6,text:'\\n            var __generator = (this && this.__generator) || function (thisArg, body) {\\n                var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n                return g = { next: verb(0), \"throw\": verb(1), \"return\":...  ...\n    2  /*!\n    3     * is-extglob \n\n~/workspace/tools/Znuny-PackageGenerator/src/helper.js:\n   83          value:   generator,\n   84          checked: false,\n   85:         priority: generator_config.priority || 50,\n   86        };\n   87  \n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/command/config.js:\n    2    name: 'Command',\n    3    description: 'Creates a SublimePackage.sublime-commands file to register your new command / plugin for the Command Palette.',\n    4:   priority: 30,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/completion/config.js:\n    2    name: 'Completion',\n    3    description: 'Creates a completions file. Completion files are smart templates that will insert text for you, adapting it to their context.',\n    4:   priority: 40,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/keymap/config.js:\n    2    name: 'Keymap',\n    3    description: 'Creates a Default.sublime-keymap file. Default.sublime-keymap files contain the key bindings (shortcuts) for a command.',\n    4:   priority: 50,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/menu/config.js:\n    2    name: 'Menu',\n    3    description: 'Creates a *.sublime-menu file. Define Menubar and various right-click menus. Creates a *.sublime-menu file.',\n    4:   priority: 60,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/plugin/config.js:\n    2    name: 'Plugin',\n    3    description: 'Creates a new SublimePackage.py file to build your own feature.',\n    4:   priority: 20,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/project/config.js:\n    2    name: 'Project',\n    3    description: 'Creates a SublimePackage.sublime-project file to register a collection of files and folders, which are shown in Sidebar.',\n    4:   priority: 60,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/readme/config.js:\n    2    name: 'README.md',\n    3    description: 'Creates a README.md',\n    4:   priority: 10,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/setting/config.js:\n    2    name: 'Setting',\n    3    description: 'Creates a SublimePackage.sublime-settings file to stores configuration data.',\n    4:   priority: 70,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/snippet/config.js:\n    2    name: 'Snippet',\n    3    description: 'Creates a Snippet file. Snippets are smart templates that will insert text for you, adapting it to their context.',\n    4:   priority: 80,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@babel/core/lib/transformation/block-hoist-plugin.js.map:\n    1:  ...traverse\\\";\\nimport type { Statement } from \\\"@babel/types\\\";\\nimport type { PluginObject } from \\\"../config/index.ts\\\";\\nimport Plugin from \\\"../config/plugin.ts\\\";\\n\\nlet LOADED_PLUGIN: Plugin | void;\\n\\nconst blockHoistPlugin: PluginObject = {\\n  /**\\n   * [Please add a description.]\\n   *\\n   * Priority:\\n   *\\n   *  - 0 We want this to be at the **very** bottom\\n   *  - 1 Default node position\\n   *  - 2 Priority over normal nodes\\n   *  - 3 We want this to be at the **very** top\\n   *  - 4 Reserved for the helpers used to implement module imports.\\n   */\\n\\n  name: \\\"internal.blockHoist\\\",\\n\\n  v...  ...\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/child_process.d.ts:\n  409           * Similarly, the `sendHandler` argument can be used to pass the handle of a\n  410           * socket to the child process. The example below spawns two children that each\n  411:          * handle connections with \"normal\" or \"special\" priority:\n  412           *\n  413           * ```js\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/dns.d.ts:\n  206      }\n  207      export interface MxRecord {\n  208:         priority: number;\n  209          exchange: string;\n  210      }\n  ...\n  236      }\n  237      export interface SrvRecord {\n  238:         priority: number;\n  239          weight: number;\n  240          port: number;\n  ...\n  440      /**\n  441       * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. The `addresses` argument passed to the `callback` function will\n  442:      * contain an array of objects containing both a `priority` and `exchange`property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`).\n  443       * @since v0.1.27\n  444       */\n  ...\n  548       * ```js\n  549       * {\n  550:      *   priority: 10,\n  551       *   weight: 5,\n  552       *   port: 21223,\n  ...\n  591       * [ { type: 'A', address: '127.0.0.1', ttl: 299 },\n  592       *   { type: 'CNAME', value: 'example.com' },\n  593:      *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },\n  594       *   { type: 'NS', value: 'ns1.example.com' },\n  595       *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/http2.d.ts:\n 2067          const NGHTTP2_FLAG_ACK: number;\n 2068          const NGHTTP2_FLAG_PADDED: number;\n 2069:         const NGHTTP2_FLAG_PRIORITY: number;\n 2070          const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;\n 2071          const DEFAULT_SETTINGS_ENABLE_PUSH: number;\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/os.d.ts:\n  471       * @param priority The scheduling priority to assign to the process.\n  472       */\n  473:     function setPriority(priority: number): void;\n  474:     function setPriority(pid: number, priority: number): void;\n  475  }\n  476  declare module \"node:os\" {\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/dns/promises.d.ts:\n  174       * [ { type: 'A', address: '127.0.0.1', ttl: 299 },\n  175       *   { type: 'CNAME', value: 'example.com' },\n  176:      *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },\n  177       *   { type: 'NS', value: 'ns1.example.com' },\n  178       *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },\n  ...\n  205      /**\n  206       * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects\n  207:      * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`).\n  208       * @since v10.6.0\n  209       */\n  ...\n  283       * ```js\n  284       * {\n  285:      *   priority: 10,\n  286       *   weight: 5,\n  287       *   port: 21223,\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/ts4.8/child_process.d.ts:\n  409           * Similarly, the `sendHandler` argument can be used to pass the handle of a\n  410           * socket to the child process. The example below spawns two children that each\n  411:          * handle connections with \"normal\" or \"special\" priority:\n  412           *\n  413           * ```js\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/ts4.8/dns.d.ts:\n  206      }\n  207      export interface MxRecord {\n  208:         priority: number;\n  209          exchange: string;\n  210      }\n  ...\n  236      }\n  237      export interface SrvRecord {\n  238:         priority: number;\n  239          weight: number;\n  240          port: number;\n  ...\n  440      /**\n  441       * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. The `addresses` argument passed to the `callback` function will\n  442:      * contain an array of objects containing both a `priority` and `exchange`property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`).\n  443       * @since v0.1.27\n  444       */\n  ...\n  548       * ```js\n  549       * {\n  550:      *   priority: 10,\n  551       *   weight: 5,\n  552       *   port: 21223,\n  ...\n  591       * [ { type: 'A', address: '127.0.0.1', ttl: 299 },\n  592       *   { type: 'CNAME', value: 'example.com' },\n  593:      *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },\n  594       *   { type: 'NS', value: 'ns1.example.com' },\n  595       *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/ts4.8/http2.d.ts:\n 2067          const NGHTTP2_FLAG_ACK: number;\n 2068          const NGHTTP2_FLAG_PADDED: number;\n 2069:         const NGHTTP2_FLAG_PRIORITY: number;\n 2070          const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;\n 2071          const DEFAULT_SETTINGS_ENABLE_PUSH: number;\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/ts4.8/os.d.ts:\n  471       * @param priority The scheduling priority to assign to the process.\n  472       */\n  473:     function setPriority(priority: number): void;\n  474:     function setPriority(pid: number, priority: number): void;\n  475  }\n  476  declare module \"node:os\" {\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/@types/node/ts4.8/dns/promises.d.ts:\n  174       * [ { type: 'A', address: '127.0.0.1', ttl: 299 },\n  175       *   { type: 'CNAME', value: 'example.com' },\n  176:      *   { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },\n  177       *   { type: 'NS', value: 'ns1.example.com' },\n  178       *   { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },\n  ...\n  205      /**\n  206       * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects\n  207:      * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`).\n  208       * @since v10.6.0\n  209       */\n  ...\n  283       * ```js\n  284       * {\n  285:      *   priority: 10,\n  286       *   weight: 5,\n  287       *   port: 21223,\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/async/dist/async.min.js:\n    1:  ...(t),e,n)}function $(e,t){var n=c(e);return B((e,t)=>{n(e[0],t)},t,1)}function ee(e){return(e<<1)+1}function te(e){return(e+1>>1)-1}function ne(e,t){return e.priority===t.priority?e.pushCount({data:e,priority:t})):{data:e,priority:t}}var a=$(e,t),{push:i,pushAsync:r}=a;return a._tasks=new ht,a._createTaskItem=({data:e,priority:t},n)=>({data:e,priority:t,callback:n}),a.push=function(e,t=0,a){return i(n(e,t),a)},a.pushAsync=function(e,t=0,a){return r(n(e,t),a)},delete a.unshift,delete a.unshiftAsync,a}function ie(e,t,n,a){var i=[...e].reverse();return qe(i,t,n,a)}function re(e){var t=c(e);return n(function a(e,n){return e.push((e,...t)=>{let a={};i...  ...\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/cssom/lib/CSSStyleDeclaration.js:\n   91    * @param {String} name\n   92    */\n   93:  getPropertyPriority: function(name) {\n   94       return this._importants[name] || \"\";\n   95   },\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/cssstyle/lib/CSSStyleDeclaration.js:\n  130     * @param {String} name\n  131     */\n  132:   getPropertyPriority: function(name) {\n  133      return this._importants[name] || '';\n  134    },\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/cssstyle/node_modules/cssom/lib/CSSStyleDeclaration.js:\n   91    * @param {String} name\n   92    */\n   93:  getPropertyPriority: function(name) {\n   94       return this._importants[name] || \"\";\n   95   },\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/istanbul-reports/lib/html-spa/assets/bundle.js:\n   20   * This source code is licensed under the MIT license found in the\n   21   * LICENSE file in the root directory of this source tree.\n   22:  ...eking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",Ye,\"transitionEnd\",\"waiting\",\"waiting\"];function Vt(e,t){for(var n=0;n ...\n   23  /** @license React v0.19.1\n   24   * scheduler.production.min.js\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/mem-fs/node_modules/@types/node/dns.d.ts:\n   84  \n   85      export interface MxRecord {\n   86:         priority: number;\n   87          exchange: string;\n   88      }\n   ..\n  120  \n  121      export interface SrvRecord {\n  122:         priority: number;\n  123          weight: number;\n  124          port: number;\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/mem-fs/node_modules/@types/node/http2.d.ts:\n  772          const NGHTTP2_FLAG_ACK: number;\n  773          const NGHTTP2_FLAG_PADDED: number;\n  774:         const NGHTTP2_FLAG_PRIORITY: number;\n  775          const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;\n  776          const DEFAULT_SETTINGS_ENABLE_PUSH: number;\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/mem-fs/node_modules/@types/node/os.d.ts:\n  231       * @param priority Must be in range of -20 to 19\n  232       */\n  233:     function setPriority(priority: number): void;\n  234      /**\n  235       * Sets the priority of the process specified process.\n  236       * @param priority Must be in range of -20 to 19\n  237       */\n  238:     function setPriority(pid: number, priority: number): void;\n  239  }\n  240  \n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/node-notifier/README.md:\n  305    sticky: false,\n  306    label: undefined,\n  307:   priority: undefined\n  308  });\n  309  ```\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/p-queue/readme.md:\n  173  const queue = new PQueue();\n  174  \n  175: queue.add(async () => '🦄', {priority: 1});\n  176: queue.add(async () => '🦄', {priority: 0});\n  177: queue.add(async () => '🦄', {priority: 1});\n  178  \n  179: console.log(queue.sizeBy({priority: 1}));\n  180  //=> 2\n  181  \n  182: console.log(queue.sizeBy({priority: 0}));\n  183  //=> 1\n  184  ```\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/p-queue/dist/priority-queue.js:\n    7      }\n    8      enqueue(run, options) {\n    9:         options = Object.assign({ priority: 0 }, options);\n   10          const element = {\n   11:             priority: options.priority,\n   12              run\n   13          };\n\n~/workspace/dennykorsukewitz/generator-sublime-package/node_modules/prettier/parser-typescript.js:\n    1:  ...length;i++){var a=n[i];if(t===a.typeParameter)return r&&!a.isFixed&&(_d(n),a.isFixed=!0),Fd(e,i)}return t}function _d(e){for(var t=0,r=e;t ...){var i=e.getOriginalNode(t,e.isAccessExpression),a=e.isPropertyAccessExpression(i)?e.declarationNameToString(i.name):e.getTextOfNode(i.argumentExpression);e.addSyntheticTrailingComment(n,3,\" \"+a+\" \")}return n}return t}},e.decorateHelper={name:\"typescript:decorate\",importName:\"__decorate\",scoped:!1,priority:2,text:'\\n            var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\\n                var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\\n                if (typeof Reflect === \"objec...  ...tors.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\\n            };'},e.metadataHelper={name:\"typescript:metadata\",importName:\"__metadata\",scoped:!1,priority:3,text:'\\n            var __metadata = (this && this.__metadata) || function (k, v) {\\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\\n            };'},e.paramHelper={name:\"typescript:param\",importName:\"__param\",scoped:!1,priority:4,text:\"\\n            var __param = (this && this.__param) || function (paramIndex, decorator) {\\n                return function (target, key) { decorator(target, key, paramIndex); }\\n            };\"}}(s||(s={})),function(e){var r;!function(e){e[e.ClassAliases=1]=\"ClassAliases\"}(r||(r={})),e.transf...  ...ccess(e.createCall(e.createFileLevelUniqueName(\"_superIndex\"),void 0,[r]),\"value\"),n):e.setTextRange(e.createCall(e.createFileLevelUniqueName(\"_superIndex\"),void 0,[r]),n)):t;var r,n}},e.createSuperAccessVariableStatement=n,e.awaiterHelper={name:\"typescript:awaiter\",importName:\"__awaiter\",scoped:!1,priority:5,text:'\\n            var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n                function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\\n                return new (P || (P = Promise))(function (re...  ...gumentExpression,n=t,4096&b?e.setTextRange(e.createPropertyAccess(e.createCall(e.createIdentifier(\"_superIndex\"),void 0,[r]),\"value\"),n):e.setTextRange(e.createCall(e.createIdentifier(\"_superIndex\"),void 0,[r]),n)):t;var r,n}},e.assignHelper={name:\"typescript:assign\",importName:\"__assign\",scoped:!1,priority:1,text:\"\\n            var __assign = (this && this.__assign) || function () {\\n                __assign = Object.assign || function(t) {\\n                    for (var s, i = 1, n = arguments.length; i < n; i++) {\\n                        s = arguments[i];\\n                        for (var p in s) if...  ...ion(163),r.enableEmitNotification(201),r.enableEmitNotification(200),r.enableEmitNotification(243))}function Ae(t,r){return e.hasModifier(r,32)?e.getInternalName(t):e.createPropertyAccess(e.getInternalName(t),\"prototype\")}},e.extendsHelper={name:\"typescript:extends\",importName:\"__extends\",scoped:!1,priority:0,text:\"\\n            var __extends = (this && this.__extends) || (function () {\\n                var extendStatics = function (d, b) {\\n                    extendStatics = Object.setPrototypeOf ||\\n                        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ...  ...       function __() { this.constructor = d; }\\n                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n                };\\n            })();\"},e.templateObjectHelper={name:\"typescript:makeTemplateObject\",importName:\"__makeTemplateObject\",scoped:!1,priority:0,text:'\\n            var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\\n                if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\\n                return cooked;\\n            };'}}(s||(s={...  ...Ae(e.setTextRange(e.createThrow(t),r))}(n[0],l)}}}}function Ae(e){e&&(A?A.push(e):A=[e])}function Fe(t,r){C=!0,k=!0,Ae(e.setEmitFlags(e.setTextRange(e.createReturn(e.createArrayLiteral(t?[me(2),t]:[me(2)])),r),384))}},e.generatorHelper={name:\"typescript:generator\",importName:\"__generator\",scoped:!1,priority:6,text:'\\n            var __generator = (this && this.__generator) || function (thisArg, body) {\\n                var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n                return g = { next: verb(0), \"throw\": verb(1), \"return\":...  ...\n    2  /*!\n    3     * is-extglob \n\n~/workspace/dennykorsukewitz/generator-sublime-package/src/helper.js:\n   87          value:       generator,\n   88          checked:     false,\n   89:         priority:    generator_config.priority || 50,\n   90        };\n   91  \n\n264 matches across 197 files\n",
-			"settings":
-			{
-				"buffer_size": 79378,
-				"line_ending": "Unix",
-				"name": "Find Results ",
-				"scratch": true
-			},
-			"undo_stack":
-			[
-			]
-		},
-		{
-			"contents": "Searching 55 files for \"priority:\"\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/command/config.js:\n    2    name: 'Command',\n    3    description: 'Creates a SublimePackage.sublime-commands file to register your new command / plugin for the Command Palette.',\n    4:   priority: 30,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/completion/config.js:\n    2    name: 'Completion',\n    3    description: 'Creates a completions file. Completion files are smart templates that will insert text for you, adapting it to their context.',\n    4:   priority: 40,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/keymap/config.js:\n    2    name: 'Keymap',\n    3    description: 'Creates a Default.sublime-keymap file. Default.sublime-keymap files contain the key bindings (shortcuts) for a command.',\n    4:   priority: 50,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/menu/config.js:\n    2    name: 'Menu',\n    3    description: 'Creates a *.sublime-menu file. Define Menubar and various right-click menus. Creates a *.sublime-menu file.',\n    4:   priority: 60,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/plugin/config.js:\n    2    name: 'Plugin',\n    3    description: 'Creates a new SublimePackage.py file to build your own feature.',\n    4:   priority: 20,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/project/config.js:\n    2    name: 'Project',\n    3    description: 'Creates a SublimePackage.sublime-project file to register a collection of files and folders, which are shown in Sidebar.',\n    4:   priority: 60,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/readme/config.js:\n    2    name: 'README.md',\n    3    description: 'Creates a README.md',\n    4:   priority: 10,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/setting/config.js:\n    2    name: 'Setting',\n    3    description: 'Creates a SublimePackage.sublime-settings file to stores configuration data.',\n    4:   priority: 70,\n    5    versions: {\n    6      '4.0.x': '',\n\n~/workspace/dennykorsukewitz/generator-sublime-package/generators/snippet/config.js:\n    2    name: 'Snippet',\n    3    description: 'Creates a Snippet file. Snippets are smart templates that will insert text for you, adapting it to their context.',\n    4:   priority: 80,\n    5    versions: {\n    6      '4.0.x': '',\n\n9 matches across 9 files\n",
-			"settings":
-			{
-				"buffer_size": 2763,
-				"line_ending": "Unix",
-				"name": "Find Results",
-				"scratch": true
-			},
-			"undo_stack":
-			[
-			]
-		},
-		{
-			"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/menu/config.js",
-			"settings":
-			{
-				"buffer_size": 1643,
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-			]
-		},
-		{
-			"file": "project.sublime-project",
-			"settings":
-			{
-				"buffer_size": 604,
-				"encoding": "UTF-8",
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					20,
-					1,
-					"paste",
-					null,
-					"AgAAAAAAAAAAAAAAzwIAAAAAAAAAAAAAzwIAAAAAAADPAgAAAAAAAGcAAABbCiAgICB7CiAgICAgICAgImNhcHRpb24iOiAiPCU9IGNvbW1hbmRfY2FwdGlvbiAlPiIsCiAgICAgICAgImNvbW1hbmQiOiAiPCU9IGNvbW1hbmRfbmFtZSAlPiIKICAgIH0sCl0K",
-					"AQAAAAAAAAABAAAAAAAAAAAAAABnAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					25,
-					1,
-					"unindent",
-					null,
-					"GgAAAAIAAAAAAAAAAgAAAAAAAAAEAAAAICAgIBUAAAAAAAAAFQAAAAAAAAAEAAAAICAgIB8AAAAAAAAAHwAAAAAAAAAEAAAAICAgICwAAAAAAAAALAAAAAAAAAAEAAAAICAgIF8AAAAAAAAAXwAAAAAAAAAEAAAAICAgIJQAAAAAAAAAlAAAAAAAAAAEAAAAICAgILsAAAAAAAAAuwAAAAAAAAAEAAAAICAgIPYAAAAAAAAA9gAAAAAAAAAEAAAAICAgIAQBAAAAAAAABAEAAAAAAAAEAAAAICAgIBEBAAAAAAAAEQEAAAAAAAAEAAAAICAgIC8BAAAAAAAALwEAAAAAAAAEAAAAICAgIFYBAAAAAAAAVgEAAAAAAAAEAAAAICAgIIcBAAAAAAAAhwEAAAAAAAAEAAAAICAgIJQBAAAAAAAAlAEAAAAAAAAEAAAAICAgIJ8BAAAAAAAAnwEAAAAAAAAEAAAAICAgILMBAAAAAAAAswEAAAAAAAAEAAAAICAgIL0BAAAAAAAAvQEAAAAAAAAEAAAAICAgINYBAAAAAAAA1gEAAAAAAAAEAAAAICAgIOEBAAAAAAAA4QEAAAAAAAAEAAAAICAgIPoBAAAAAAAA+gEAAAAAAAAEAAAAICAgIAQCAAAAAAAABAIAAAAAAAAEAAAAICAgIBECAAAAAAAAEQIAAAAAAAAEAAAAICAgIC8CAAAAAAAALwIAAAAAAAAEAAAAICAgIEsCAAAAAAAASwIAAAAAAAAEAAAAICAgIFgCAAAAAAAAWAIAAAAAAAAEAAAAICAgIGICAAAAAAAAYgIAAAAAAAAEAAAAICAgIA",
-					"AQAAAAAAAAABAAAAzwIAAAAAAAAQAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					27,
-					1,
-					"unindent",
-					null,
-					"GgAAAAIAAAAAAAAAAgAAAAAAAAAEAAAAICAgIBEAAAAAAAAAEQAAAAAAAAAEAAAAICAgIBcAAAAAAAAAFwAAAAAAAAAEAAAAICAgICAAAAAAAAAAIAAAAAAAAAAEAAAAICAgIE8AAAAAAAAATwAAAAAAAAAEAAAAICAgIIAAAAAAAAAAgAAAAAAAAAAEAAAAICAgIKMAAAAAAAAAowAAAAAAAAAEAAAAICAgINoAAAAAAAAA2gAAAAAAAAAEAAAAICAgIOQAAAAAAAAA5AAAAAAAAAAEAAAAICAgIO0AAAAAAAAA7QAAAAAAAAAEAAAAICAgIAcBAAAAAAAABwEAAAAAAAAEAAAAICAgICoBAAAAAAAAKgEAAAAAAAAEAAAAICAgIFcBAAAAAAAAVwEAAAAAAAAEAAAAICAgIGABAAAAAAAAYAEAAAAAAAAEAAAAICAgIGcBAAAAAAAAZwEAAAAAAAAEAAAAICAgIHcBAAAAAAAAdwEAAAAAAAAEAAAAICAgIH0BAAAAAAAAfQEAAAAAAAAEAAAAICAgIJIBAAAAAAAAkgEAAAAAAAAEAAAAICAgIJkBAAAAAAAAmQEAAAAAAAAEAAAAICAgIK4BAAAAAAAArgEAAAAAAAAEAAAAICAgILQBAAAAAAAAtAEAAAAAAAAEAAAAICAgIL0BAAAAAAAAvQEAAAAAAAAEAAAAICAgINcBAAAAAAAA1wEAAAAAAAAEAAAAICAgIO8BAAAAAAAA7wEAAAAAAAAEAAAAICAgIPgBAAAAAAAA+AEAAAAAAAAEAAAAICAgIP4BAAAAAAAA/gEAAAAAAAAEAAAAICAgIA",
-					"AQAAAAAAAAABAAAAZwIAAAAAAAAMAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					43,
-					1,
-					"indent",
-					null,
-					"BAAAACAAAAAAAAAAJAAAAAAAAAAAAAAAUwAAAAAAAABXAAAAAAAAAAAAAACIAAAAAAAAAIwAAAAAAAAAAAAAAK8AAAAAAAAAswAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAKwAAAAAAAACvAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					50,
-					1,
-					"left_delete",
-					null,
-					"BAAAALsAAAAAAAAAuwAAAAAAAAACAAAAICCUAAAAAAAAAJQAAAAAAAAAAgAAACAgXwAAAAAAAABfAAAAAAAAAAIAAAAgICwAAAAAAAAALAAAAAAAAAACAAAAICA",
-					"AQAAAAAAAAAEAAAALgAAAAAAAAAsAAAAAAAAAAAAAAAAAPC/YQAAAAAAAABfAAAAAAAAAAAAAAAAAPC/lgAAAAAAAACUAAAAAAAAAAAAAAAAAPC/vQAAAAAAAAC7AAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					53,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"BgAAADsBAAAAAAAAPgEAAAAAAAAAAAAAPgEAAAAAAAA+AQAAAAAAAAEAAAAgGAEAAAAAAAAbAQAAAAAAAAAAAAAbAQAAAAAAABsBAAAAAAAAAQAAACD+AAAAAAAAAAEBAAAAAAAAAAAAAAEBAAAAAAAAAQEAAAAAAAABAAAAIA",
-					"AQAAAAAAAAADAAAA/wAAAAAAAAD+AAAAAAAAAAAAAAAAAPC/GQEAAAAAAAAYAQAAAAAAAAAAAAAAAPC/PAEAAAAAAAA7AQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					80,
-					1,
-					"cut",
-					null,
-					"AQAAABAAAAAAAAAAEAAAAAAAAAAFAAAACiAgICA",
-					"AQAAAAAAAAABAAAAFQAAAAAAAAAQAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					87,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAABAAAAAAAAAAEQAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					91,
-					1,
-					"cut",
-					null,
-					"AQAAAIABAAAAAAAAgAEAAAAAAAAFAAAACiAgICA",
-					"AQAAAAAAAAABAAAAhQEAAAAAAACAAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					96,
-					1,
-					"cut",
-					null,
-					"AQAAALIBAAAAAAAAsgEAAAAAAAAFAAAACiAgICA",
-					"AQAAAAAAAAABAAAAtwEAAAAAAACyAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					135,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAAMcBAAAAAAAAyQEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAxwEAAAAAAADHAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					140,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAAOMBAAAAAAAA5QEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA4wEAAAAAAADjAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					174,
-					1,
-					"paste",
-					null,
-					"AgAAAAAAAAAAAAAAdgIAAAAAAAAAAAAAdgIAAAAAAAB2AgAAAAAAAHABAAB7CiAgICAiZm9sZGVycyI6IFsKICAgICAgIHsKICAgICAgICAgICAgInBhdGgiOiAiRDpcXERvY1xcUXVpY2tfc2VhcmNoXFxJVCIsCiAgICAgICAgICAgICJmb2xkZXJfZXhjbHVkZV9wYXR0ZXJucyI6IFsiYmFja3VwIl0sCiAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLAogICAgICAgICAgICAiZmlsZV9leGNsdWRlX3BhdHRlcm5zIjogWyIqLmRvYyIsICIqLmRvY3giXQogICAgICAgfSwKICAgICAgIHsKICAgICAgICAgICAgInBhdGgiOiAiZG9jcyIsCiAgICAgICAgICAgICJuYW1lIjogIkRvY3VtZW50YXRpb24iLAogICAgICAgICAgICAiZmlsZV9leGNsdWRlX3BhdHRlcm5zIjogWyIqLmNzcyJdCiAgICAgICB9CiAgICBdLA",
-					"AQAAAAAAAAABAAAAcAEAAAAAAAAAAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					178,
-					1,
-					"cut",
-					null,
-					"AQAAAHQCAAAAAAAAdAIAAAAAAAACAAAAfQo",
-					"AQAAAAAAAAABAAAAdQIAAAAAAAB1AgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					192,
-					1,
-					"paste",
-					null,
-					"AgAAAAAAAAAAAAAAcAIAAAAAAAAAAAAAcAIAAAAAAABwAgAAAAAAAAcDAAB7CiAgICAiZm9sZGVycyI6CiAgICBbCiAgICAgICAgewogICAgICAgICAgICAicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvdG9vbHMvWm51bnktUGFja2FnZUdlbmVyYXRvciIsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS9kZW5ueWtvcnN1a2V3aXR6L3N1YmxpbWUtdGVzdCIsCiAgICAgICAgfSwKICAgICAgICB7CgogICAgICAgICAgICAicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9nZW5lcmF0b3Itc3VibGltZS1wYWNrYWdlIiwKICAgICAgICAgICAgImZpbGVfZXhjbHVkZV9wYXR0ZXJucyI6IFsiKi5kb2MiLCAiKi5kb2N4Il0sCiAgICAgICAgICAgIC8vIGZpbGVfaW5jbHVkZV9wYXR0ZXJuczogWyIqLmpzb24iLCAiKi5tZCJdLAogICAgICAgICAgICAiZm9sZGVyX2V4Y2x1ZGVfcGF0dGVybnMiOiBbImJhY2t1cCJdLAogICAgICAgICAgICAvLyBmb2xkZXJfaW5jbHVkZV9wYXR0ZXJuczogWyJ0ZXN0IiwgInNyYyJdLAogICAgICAgICAgICAiZm9sbG93X3N5bWxpbmtzIjogdHJ1ZSwKICAgICAgICB9LAogICAgXSwKCiAgICAic2V0dGluZ3MiOnsKICAgICAgICJ0YWJfc2l6ZSI6IDgKICAgIH0sCiAgICAiYnVpbGRfc3lzdGVtcyI6WwogICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJMaXN0IiwKICAgICAgICAgICAgImNtZCI6IFsibHMiXQogICAgICAgfQogICAgXQp9",
-					"AQAAAAAAAAABAAAAAAAAAAAAAAAHAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					203,
-					9,
-					"swap_line_down",
-					null,
-					"EgAAAPMAAAAAAAAAXwEAAAAAAAAAAAAAfQAAAAAAAAB9AAAAAAAAAGwAAAAgICAgICAgIHsKICAgICAgICAgICAgInBhdGgiOiAiL1VzZXJzL2Rlbm55a29yc3VrZXdpdHovd29ya3NwYWNlL2Rlbm55a29yc3VrZXdpdHovc3VibGltZS10ZXN0IiwKICAgICAgICB9LAr0AAAAAAAAAGABAAAAAAAAAAAAAIcAAAAAAAAAhwAAAAAAAABsAAAAICAgICAgICB7CiAgICAgICAgICAgICJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS9kZW5ueWtvcnN1a2V3aXR6L3N1YmxpbWUtdGVzdCIsCiAgICAgICAgfSwKWAEAAAAAAADEAQAAAAAAAAAAAACIAAAAAAAAAIgAAAAAAAAAbAAAACAgICAgICAgewogICAgICAgICAgICAicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9zdWJsaW1lLXRlc3QiLAogICAgICAgIH0sCpIBAAAAAAAA/gEAAAAAAAAAAAAA7AAAAAAAAADsAAAAAAAAAGwAAAAgICAgICAgIHsKICAgICAgICAgICAgInBhdGgiOiAiL1VzZXJzL2Rlbm55a29yc3VrZXdpdHovd29ya3NwYWNlL2Rlbm55a29yc3VrZXdpdHovc3VibGltZS10ZXN0IiwKICAgICAgICB9LArMAQAAAAAAADgCAAAAAAAAAAAAACYBAAAAAAAAJgEAAAAAAABsAAAAICAgICAgICB7CiAgICAgICAgICAgICJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS9kZW5ueWtvcnN1a2V3aXR6L3N1YmxpbWUtdGVzdCIsCiAgICAgICAgfSwK/wEAAAAAAABrAgAAAAAAAAAAAABgAQAAAAAAAGABAAAAAAAAbAAAACAgICAgICAgewogICAgICAgICAgICAicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9zdWJsaW1lLXRlc3QiLAogICAgICAgIH0sCjgCAAAAAAAApAIAAAAAAAAAAAAAkwEAAAAAAACTAQAAAAAAAGwAAAAgICAgICAgIHsKICAgICAgICAgICAgInBhdGgiOiAiL1VzZXJzL2Rlbm55a29yc3VrZXdpdHovd29ya3NwYWNlL2Rlbm55a29yc3VrZXdpdHovc3VibGltZS10ZXN0IiwKICAgICAgICB9LApdAgAAAAAAAMkCAAAAAAAAAAAAAMwBAAAAAAAAzAEAAAAAAABsAAAAICAgICAgICB7CiAgICAgICAgICAgICJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS9kZW5ueWtvcnN1a2V3aXR6L3N1YmxpbWUtdGVzdCIsCiAgICAgICAgfSwKaAIAAAAAAADUAgAAAAAAAAAAAADxAQAAAAAAAPEBAAAAAAAAbAAAACAgICAgICAgewogICAgICAgICAgICAicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9zdWJsaW1lLXRlc3QiLAogICAgICAgIH0sCg",
-					"AQAAAAAAAAABAAAA6AAAAAAAAACGAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					209,
-					2,
-					"cut",
-					null,
-					"AgAAABIAAAAAAAAAEgAAAAAAAABqAAAAICAgICAgICB7CiAgICAgICAgICAgICJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS90b29scy9abnVueS1QYWNrYWdlR2VuZXJhdG9yIiwKICAgICAgICB9LBIAAAAAAAAAEgAAAAAAAAABAAAACg",
-					"AQAAAAAAAAABAAAAfAAAAAAAAAASAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					225,
-					1,
-					"paste",
-					null,
-					"AgAAADIAAAAAAAAARQAAAAAAAAAAAAAARQAAAAAAAABFAAAAAAAAAEwAAAAvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9nZW5lcmF0b3Itc3VibGltZS1wYWNrYWdl",
-					"AQAAAAAAAAABAAAAMgAAAAAAAAB+AAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					230,
-					1,
-					"paste",
-					null,
-					"AgAAAHcBAAAAAAAAigEAAAAAAAAAAAAAigEAAAAAAACKAQAAAAAAAD8AAAAvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9zdWJsaW1lLXRlc3Q",
-					"AQAAAAAAAAABAAAAdwEAAAAAAAC2AQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					251,
-					1,
-					"paste",
-					null,
-					"BAAAAHsBAAAAAAAAhwEAAAAAAAAAAAAAhwEAAAAAAACHAQAAAAAAAAwAAABwYWNrYWdlX25hbWU2AAAAAAAAAEIAAAAAAAAAAAAAAEIAAAAAAAAAQgAAAAAAAAAMAAAAcGFja2FnZV9uYW1l",
-					"AQAAAAAAAAACAAAANgAAAAAAAABCAAAAAAAAAAAAAAAAAPC/ewEAAAAAAACHAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					265,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAACcBAAAAAAAAKAEAAAAAAAAAAAAAKAEAAAAAAAA0AQAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAJwEAAAAAAAAnAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					272,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AwAAAEcAAAAAAAAASAAAAAAAAAAAAAAASAAAAAAAAABUAAAAAAAAAAAAAAA1AQAAAAAAADUBAAAAAAAADAAAACAgICAgICAgICAgIA",
-					"AQAAAAAAAAABAAAARwAAAAAAAABHAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					275,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAAEgAAAAAAAAASAAAAAAAAAAMAAAAICAgICAgICAgICAg",
-					"AQAAAAAAAAABAAAAVAAAAAAAAABUAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					284,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AwAAABsAAAAAAAAAHAAAAAAAAAAAAAAAHAAAAAAAAAAkAAAAAAAAAAAAAAAkAAAAAAAAACgAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAGwAAAAAAAAAbAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					287,
-					1,
-					"paste",
-					null,
-					"AQAAACgAAAAAAAAAsAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAKAAAAAAAAAAoAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					292,
-					1,
-					"cut",
-					null,
-					"AQAAABwAAAAAAAAAHAAAAAAAAABaAAAAICAgICAgICAgICAgInBhdGgiOiBjYW4gYmUgcmVsYXRpdmUgdG8gcHJvamVjdCBkaXJlY3RvcnksIG9yIGFuIGFic29sdXRlIHBhdGggW01hbmRhdG9yeV0K",
-					"AQAAAAAAAAABAAAALwAAAAAAAAAvAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					297,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAACQAAAAAAAAAKAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAJAAAAAAAAAAkAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					308,
-					1,
-					"insert",
-					{
-						"characters": "\""
-					},
-					"AQAAADAAAAAAAAAAMQAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					311,
-					1,
-					"insert_snippet",
-					{
-						"contents": "\"$0\""
-					},
-					"AQAAAFsAAAAAAAAAXQAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAWwAAAAAAAABbAAAAAAAAAP///////+9/"
-				],
-				[
-					314,
-					1,
-					"cut",
-					null,
-					"AQAAAF4AAAAAAAAAXgAAAAAAAAABAAAACg",
-					"AQAAAAAAAAABAAAAXgAAAAAAAABeAAAAAAAAAAAAAAAAAIBA"
-				],
-				[
-					318,
-					1,
-					"left_delete",
-					null,
-					"AQAAAFwAAAAAAAAAXAAAAAAAAAABAAAAIg",
-					"AQAAAAAAAAABAAAAXQAAAAAAAABdAAAAAAAAAP///////+9/"
-				],
-				[
-					324,
-					1,
-					"insert",
-					{
-						"characters": ","
-					},
-					"AQAAAFwAAAAAAAAAXQAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAXAAAAAAAAABcAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					337,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAACgAAAAAAAAAKwAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAKQAAAAAAAAApAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					348,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAJkAAAAAAAAAnAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAowAAAAAAAACjAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					352,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAABABAAAAAAAAEwEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAHAEAAAAAAAAcAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					366,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"AQAAAIABAAAAAAAAgwEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAgAEAAAAAAACAAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					370,
-					1,
-					"cut",
-					null,
-					"AQAAAHMBAAAAAAAAcwEAAAAAAAABAAAACg",
-					"AQAAAAAAAAABAAAAcwEAAAAAAABzAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					382,
-					1,
-					"insert",
-					{
-						"characters": "\""
-					},
-					"AgAAAEkBAAAAAAAASgEAAAAAAAAAAAAA2QAAAAAAAADaAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAACAAAA2QAAAAAAAADZAAAAAAAAAAAAAAAAAPC/SQEAAAAAAABJAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					388,
-					1,
-					"insert",
-					{
-						"characters": "\""
-					},
-					"AgAAAGIBAAAAAAAAYwEAAAAAAAAAAAAA7wAAAAAAAADwAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAACAAAA7wAAAAAAAADvAAAAAAAAAAAAAAAAAPC/YgEAAAAAAABiAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					398,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"BQAAAJ4BAAAAAAAAnwEAAAAAAAAAAAAAdgEAAAAAAAB4AQAAAAAAAAAAAAA7AQAAAAAAAD4BAAAAAAAAAAAAAAUBAAAAAAAABgEAAAAAAAAAAAAAyQAAAAAAAADNAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAAFAAAAyQAAAAAAAADJAAAAAAAAAAAAAAAAAPC/BQEAAAAAAAAFAQAAAAAAAAAAAAAAAPC/OwEAAAAAAAA7AQAAAAAAAAAAAAAAAPC/dgEAAAAAAAB2AQAAAAAAAAAAAAAAAPC/ngEAAAAAAACeAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					400,
-					1,
-					"insert",
-					{
-						"characters": "\t\t\t\t\t\t\t"
-					},
-					"IwAAAKkBAAAAAAAArQEAAAAAAAAAAAAAgAEAAAAAAACEAQAAAAAAAAAAAABDAQAAAAAAAEcBAAAAAAAAAAAAAAoBAAAAAAAADgEAAAAAAAAAAAAAzQAAAAAAAADRAAAAAAAAAAAAAAC9AQAAAAAAAMEBAAAAAAAAAAAAAJABAAAAAAAAlAEAAAAAAAAAAAAATwEAAAAAAABTAQAAAAAAAAAAAAASAQAAAAAAABYBAAAAAAAAAAAAANEAAAAAAAAA1QAAAAAAAAAAAAAA0QEAAAAAAADVAQAAAAAAAAAAAACgAQAAAAAAAKQBAAAAAAAAAAAAAFsBAAAAAAAAXwEAAAAAAAAAAAAAGgEAAAAAAAAeAQAAAAAAAAAAAADVAAAAAAAAANkAAAAAAAAAAAAAAOUBAAAAAAAA6QEAAAAAAAAAAAAAsAEAAAAAAAC0AQAAAAAAAAAAAABnAQAAAAAAAGsBAAAAAAAAAAAAACIBAAAAAAAAJgEAAAAAAAAAAAAA2QAAAAAAAADdAAAAAAAAAAAAAAD5AQAAAAAAAP0BAAAAAAAAAAAAAMABAAAAAAAAxAEAAAAAAAAAAAAAcwEAAAAAAAB3AQAAAAAAAAAAAAAqAQAAAAAAAC4BAAAAAAAAAAAAAN0AAAAAAAAA4QAAAAAAAAAAAAAADQIAAAAAAAARAgAAAAAAAAAAAADQAQAAAAAAANQBAAAAAAAAAAAAAH8BAAAAAAAAgwEAAAAAAAAAAAAAMgEAAAAAAAA2AQAAAAAAAAAAAADhAAAAAAAAAOUAAAAAAAAAAAAAACECAAAAAAAAJQIAAAAAAAAAAAAA4AEAAAAAAADkAQAAAAAAAAAAAACLAQAAAAAAAI8BAAAAAAAAAAAAADoBAAAAAAAAPgEAAAAAAAAAAAAA5QAAAAAAAADpAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAAFAAAAzQAAAAAAAADNAAAAAAAAAAAAAAAAAPC/CgEAAAAAAAAKAQAAAAAAAAAAAAAAAPC/QwEAAAAAAABDAQAAAAAAAAAAAAAAAPC/gAEAAAAAAACAAQAAAAAAAAAAAAAAAPC/qQEAAAAAAACpAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					404,
-					1,
-					"insert",
-					{
-						"characters": "//"
-					},
-					"DwAAADACAAAAAAAAMQIAAAAAAAAAAAAAMQIAAAAAAAAxAgAAAAAAAAEAAAAg1wEAAAAAAADYAQAAAAAAAAAAAADYAQAAAAAAANgBAAAAAAAAAQAAACCCAQAAAAAAAIMBAAAAAAAAAAAAAIMBAAAAAAAAgwEAAAAAAAABAAAAICkBAAAAAAAAKgEAAAAAAAAAAAAAKgEAAAAAAAAqAQAAAAAAAAEAAAAgzAAAAAAAAADNAAAAAAAAAAAAAADNAAAAAAAAAM0AAAAAAAAAAQAAACAxAgAAAAAAADICAAAAAAAAAAAAANgBAAAAAAAA2QEAAAAAAAAAAAAAgwEAAAAAAACEAQAAAAAAAAAAAAAqAQAAAAAAACsBAAAAAAAAAAAAAM0AAAAAAAAAzgAAAAAAAAAAAAAA",
-					"AQAAAAAAAAAFAAAAzAAAAAAAAADNAAAAAAAAAAAAAAAAAPC/KQEAAAAAAAAqAQAAAAAAAAAAAAAAAPC/ggEAAAAAAACDAQAAAAAAAAAAAAAAAPC/1wEAAAAAAADYAQAAAAAAAAAAAAAAAPC/MAIAAAAAAAAxAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					405,
-					1,
-					"insert",
-					{
-						"characters": " optional"
-					},
-					"LQAAADYCAAAAAAAANwIAAAAAAAAAAAAA3AEAAAAAAADdAQAAAAAAAAAAAACGAQAAAAAAAIcBAAAAAAAAAAAAACwBAAAAAAAALQEAAAAAAAAAAAAAzgAAAAAAAADPAAAAAAAAAAAAAAA7AgAAAAAAADwCAAAAAAAAAAAAAOABAAAAAAAA4QEAAAAAAAAAAAAAiQEAAAAAAACKAQAAAAAAAAAAAAAuAQAAAAAAAC8BAAAAAAAAAAAAAM8AAAAAAAAA0AAAAAAAAAAAAAAAQAIAAAAAAABBAgAAAAAAAAAAAADkAQAAAAAAAOUBAAAAAAAAAAAAAIwBAAAAAAAAjQEAAAAAAAAAAAAAMAEAAAAAAAAxAQAAAAAAAAAAAADQAAAAAAAAANEAAAAAAAAAAAAAAEUCAAAAAAAARgIAAAAAAAAAAAAA6AEAAAAAAADpAQAAAAAAAAAAAACPAQAAAAAAAJABAAAAAAAAAAAAADIBAAAAAAAAMwEAAAAAAAAAAAAA0QAAAAAAAADSAAAAAAAAAAAAAABKAgAAAAAAAEsCAAAAAAAAAAAAAOwBAAAAAAAA7QEAAAAAAAAAAAAAkgEAAAAAAACTAQAAAAAAAAAAAAA0AQAAAAAAADUBAAAAAAAAAAAAANIAAAAAAAAA0wAAAAAAAAAAAAAATwIAAAAAAABQAgAAAAAAAAAAAADwAQAAAAAAAPEBAAAAAAAAAAAAAJUBAAAAAAAAlgEAAAAAAAAAAAAANgEAAAAAAAA3AQAAAAAAAAAAAADTAAAAAAAAANQAAAAAAAAAAAAAAFQCAAAAAAAAVQIAAAAAAAAAAAAA9AEAAAAAAAD1AQAAAAAAAAAAAACYAQAAAAAAAJkBAAAAAAAAAAAAADgBAAAAAAAAOQEAAAAAAAAAAAAA1AAAAAAAAADVAAAAAAAAAAAAAABZAgAAAAAAAFoCAAAAAAAAAAAAAPgBAAAAAAAA+QEAAAAAAAAAAAAAmwEAAAAAAACcAQAAAAAAAAAAAAA6AQAAAAAAADsBAAAAAAAAAAAAANUAAAAAAAAA1gAAAAAAAAAAAAAAXgIAAAAAAABfAgAAAAAAAAAAAAD8AQAAAAAAAP0BAAAAAAAAAAAAAJ4BAAAAAAAAnwEAAAAAAAAAAAAAPAEAAAAAAAA9AQAAAAAAAAAAAADWAAAAAAAAANcAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAAFAAAAzgAAAAAAAADOAAAAAAAAAAAAAAAAAPC/LAEAAAAAAAAsAQAAAAAAAAAAAAAAAPC/hgEAAAAAAACGAQAAAAAAAAAAAAAAAPC/3AEAAAAAAADcAQAAAAAAAAAAAAAAAPC/NgIAAAAAAAA2AgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					406,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"BQAAAGMCAAAAAAAAYwIAAAAAAAAEAAAAICAgIAACAAAAAAAAAAIAAAAAAAAYAAAAICAgICAgICAgICAgICAgICAgICAgICAgoQEAAAAAAAChAQAAAAAAABQAAAAgICAgICAgICAgICAgICAgICAgID4BAAAAAAAAPgEAAAAAAAAYAAAAICAgICAgICAgICAgICAgICAgICAgICAg1wAAAAAAAADXAAAAAAAAABwAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAg",
-					"AQAAAAAAAAAFAAAA1wAAAAAAAADXAAAAAAAAAAAAAAAAAPC/PgEAAAAAAAA+AQAAAAAAAAAAAAAAAPC/oQEAAAAAAAChAQAAAAAAAAAAAAAAAPC/AAIAAAAAAAAAAgAAAAAAAAAAAAAAAPC/YwIAAAAAAABjAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					414,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"BQAAAAMCAAAAAAAABAIAAAAAAAAAAAAAuAEAAAAAAAC5AQAAAAAAAAAAAABtAQAAAAAAAG4BAAAAAAAAAAAAACIBAAAAAAAAIwEAAAAAAAAAAAAA1wAAAAAAAADYAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAAFAAAA1wAAAAAAAADXAAAAAAAAAAAAAAAAAPC/IgEAAAAAAAAiAQAAAAAAAAAAAAAAAPC/bQEAAAAAAABtAQAAAAAAAAAAAAAAAPC/uAEAAAAAAAC4AQAAAAAAAAAAAAAAAPC/AwIAAAAAAAADAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					418,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"BQAAAAcCAAAAAAAABwIAAAAAAAABAAAAILsBAAAAAAAAuwEAAAAAAAABAAAAIG8BAAAAAAAAbwEAAAAAAAABAAAAICMBAAAAAAAAIwEAAAAAAAABAAAAINcAAAAAAAAA1wAAAAAAAAABAAAAIA",
-					"AQAAAAAAAAAFAAAA2AAAAAAAAADYAAAAAAAAAAAAAAAAAPC/JAEAAAAAAAAkAQAAAAAAAAAAAAAAAPC/cAEAAAAAAABwAQAAAAAAAAAAAAAAAPC/vAEAAAAAAAC8AQAAAAAAAAAAAAAAAPC/CAIAAAAAAAAIAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					428,
-					1,
-					"valign",
-					null,
-					"CgAAALMAAAAAAAAAtQAAAAAAAAACAAAAOiD+AAAAAAAAAAABAAAAAAAAAgAAADogSwEAAAAAAABNAQAAAAAAAAIAAAA6IJYBAAAAAAAAmAEAAAAAAAACAAAAOiDZAQAAAAAAANsBAAAAAAAAAgAAADogtAAAAAAAAAC2AAAAAAAAAAAAAAABAQAAAAAAAAMBAAAAAAAAAAAAAFABAAAAAAAAUAEAAAAAAAAAAAAAmwEAAAAAAACbAQAAAAAAAAAAAADeAQAAAAAAAOYBAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA2wEAAAAAAADbAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					434,
-					1,
-					"insert",
-					{
-						"characters": "\t\t\t\t\t"
-					},
-					"BgAAAOwBAAAAAAAA7QEAAAAAAAAAAAAA7QEAAAAAAADtAQAAAAAAABgAAAAgICAgICAgICAgICAgICAgICAgICAgICDtAQAAAAAAAPEBAAAAAAAAAAAAAPEBAAAAAAAA9QEAAAAAAAAAAAAA9QEAAAAAAAD5AQAAAAAAAAAAAAD5AQAAAAAAAP0BAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA7AEAAAAAAAAEAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					437,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAALEBAAAAAAAAsgEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAsQEAAAAAAACxAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					440,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AQAAAGYBAAAAAAAAZwEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAZgEAAAAAAABmAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					451,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AgAAABcBAAAAAAAAGgEAAAAAAAAAAAAAGgEAAAAAAAAaAQAAAAAAAAQAAAAgICAg",
-					"AQAAAAAAAAABAAAAFwEAAAAAAAAbAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					457,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"AgAAAMsAAAAAAAAAzQAAAAAAAAAAAAAAzQAAAAAAAADNAAAAAAAAAAMAAAAgICA",
-					"AQAAAAAAAAABAAAAywAAAAAAAADOAAAAAAAAAAAAAAAAAPC/"
-				]
-			]
-		},
-		{
-			"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/projects/DELETEME.sublime-project",
-			"settings":
-			{
-				"buffer_size": 686,
-				"encoding": "UTF-8",
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					3,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAOEAAAAAAAAA4gAAAAAAAAAAAAAA4gAAAAAAAADlAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA4QAAAAAAAADhAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					4,
-					1,
-					"paste",
-					null,
-					"AQAAAOUAAAAAAAAAgAEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA5QAAAAAAAADlAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					11,
-					1,
-					"toggle_comment",
-					{
-						"block": false
-					},
-					"BQAAAHEBAAAAAAAAdAEAAAAAAAAAAAAATQEAAAAAAABQAQAAAAAAAAAAAAApAQAAAAAAACwBAAAAAAAAAAAAAAcBAAAAAAAACgEAAAAAAAAAAAAA5QAAAAAAAADoAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAgAEAAAAAAAD0AAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					22,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAI8BAAAAAAAAkAEAAAAAAAAAAAAAkAEAAAAAAACcAQAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAjwEAAAAAAACPAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					23,
-					1,
-					"paste",
-					null,
-					"AQAAAJwBAAAAAAAALAIAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAnAEAAAAAAACcAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					24,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAACwCAAAAAAAALQIAAAAAAAAAAAAALQIAAAAAAAA5AgAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAALAIAAAAAAAAsAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					27,
-					3,
-					"unindent",
-					null,
-					"AwAAAJABAAAAAAAAkAEAAAAAAAAEAAAAICAgIJABAAAAAAAAkAEAAAAAAAAEAAAAICAgIJABAAAAAAAAkAEAAAAAAAAEAAAAICAgIA",
-					"AQAAAAAAAAABAAAAqAEAAAAAAACoAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					28,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAACECAAAAAAAAIQIAAAAAAAAMAAAAICAgICAgICAgICAg",
-					"AQAAAAAAAAABAAAAnAEAAAAAAACcAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					32,
-					1,
-					"insert",
-					{
-						"characters": ","
-					},
-					"AQAAACACAAAAAAAAIQIAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAIAIAAAAAAAAgAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					43,
-					1,
-					"insert",
-					{
-						"characters": "png"
-					},
-					"BAAAABECAAAAAAAAEgIAAAAAAAAAAAAAEgIAAAAAAAASAgAAAAAAAAMAAABkb2MSAgAAAAAAABMCAAAAAAAAAAAAABMCAAAAAAAAFAIAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAEQIAAAAAAAAUAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					50,
-					1,
-					"insert",
-					{
-						"characters": "doc"
-					},
-					"BAAAABECAAAAAAAAEgIAAAAAAAAAAAAAEgIAAAAAAAASAgAAAAAAAAMAAABwbmcSAgAAAAAAABMCAAAAAAAAAAAAABMCAAAAAAAAFAIAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAEQIAAAAAAAAUAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					55,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAOEAAAAAAAAA4gAAAAAAAAAAAAAA4gAAAAAAAADlAAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA4QAAAAAAAADhAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					57,
-					10,
-					"swap_line_down",
-					null,
-					"FAAAAOYAAAAAAAAABgEAAAAAAAAAAAAAwgAAAAAAAADCAAAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCgIBAAAAAAAAIgEAAAAAAAAAAAAAxgAAAAAAAADGAAAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCicBAAAAAAAARwEAAAAAAAAAAAAA4gAAAAAAAADiAAAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCk4BAAAAAAAAbgEAAAAAAAAAAAAABwEAAAAAAAAHAQAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCnUBAAAAAAAAlQEAAAAAAAAAAAAALgEAAAAAAAAuAQAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCpQBAAAAAAAAtAEAAAAAAAAAAAAAVQEAAAAAAABVAQAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCscBAAAAAAAA5wEAAAAAAAAAAAAAdAEAAAAAAAB0AQAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCuwBAAAAAAAADAIAAAAAAAAAAAAApwEAAAAAAACnAQAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCiYCAAAAAAAARgIAAAAAAAAAAAAAzAEAAAAAAADMAQAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCicCAAAAAAAARwIAAAAAAAAAAAAABgIAAAAAAAAGAgAAAAAAACAAAAAJCQkvKiJmb2xsb3dfc3ltbGlua3MiOiB0cnVlLCovCg",
-					"AQAAAAAAAAABAAAAxQAAAAAAAADFAAAAAAAAAAAAAAAAAFhA"
-				],
-				[
-					58,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAAMIAAAAAAAAAwgAAAAAAAAADAAAACQkJ",
-					"AQAAAAAAAAABAAAACgIAAAAAAAAKAgAAAAAAAAAAAAAAAFhA"
-				],
-				[
-					62,
-					10,
-					"swap_line_up",
-					null,
-					"FAAAACQCAAAAAAAAJAIAAAAAAABbAAAACQkJInBhdGgiOiAiL1VzZXJzL2Rlbm55a29yc3VrZXdpdHovd29ya3NwYWNlL2Rlbm55a29yc3VrZXdpdHovZ2VuZXJhdG9yLXN1YmxpbWUtcGFja2FnZSIsCgQCAAAAAAAAXwIAAAAAAAAAAAAABAIAAAAAAAAEAgAAAAAAAFsAAAAJCQkicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9nZW5lcmF0b3Itc3VibGltZS1wYWNrYWdlIiwKAwIAAAAAAABeAgAAAAAAAAAAAAADAgAAAAAAAAMCAAAAAAAAWwAAAAkJCSJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS9kZW5ueWtvcnN1a2V3aXR6L2dlbmVyYXRvci1zdWJsaW1lLXBhY2thZ2UiLArJAQAAAAAAACQCAAAAAAAAAAAAAMkBAAAAAAAAyQEAAAAAAABbAAAACQkJInBhdGgiOiAiL1VzZXJzL2Rlbm55a29yc3VrZXdpdHovd29ya3NwYWNlL2Rlbm55a29yc3VrZXdpdHovZ2VuZXJhdG9yLXN1YmxpbWUtcGFja2FnZSIsCqQBAAAAAAAA/wEAAAAAAAAAAAAApAEAAAAAAACkAQAAAAAAAFsAAAAJCQkicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9nZW5lcmF0b3Itc3VibGltZS1wYWNrYWdlIiwKcQEAAAAAAADMAQAAAAAAAAAAAABxAQAAAAAAAHEBAAAAAAAAWwAAAAkJCSJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS9kZW5ueWtvcnN1a2V3aXR6L2dlbmVyYXRvci1zdWJsaW1lLXBhY2thZ2UiLApSAQAAAAAAAK0BAAAAAAAAAAAAAFIBAAAAAAAAUgEAAAAAAABbAAAACQkJInBhdGgiOiAiL1VzZXJzL2Rlbm55a29yc3VrZXdpdHovd29ya3NwYWNlL2Rlbm55a29yc3VrZXdpdHovZ2VuZXJhdG9yLXN1YmxpbWUtcGFja2FnZSIsCisBAAAAAAAAhgEAAAAAAAAAAAAAKwEAAAAAAAArAQAAAAAAAFsAAAAJCQkicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9nZW5lcmF0b3Itc3VibGltZS1wYWNrYWdlIiwKBAEAAAAAAABfAQAAAAAAAAAAAAAEAQAAAAAAAAQBAAAAAAAAWwAAAAkJCSJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS9kZW5ueWtvcnN1a2V3aXR6L2dlbmVyYXRvci1zdWJsaW1lLXBhY2thZ2UiLArfAAAAAAAAADoBAAAAAAAAAAAAAN8AAAAAAAAA3wAAAAAAAABbAAAACQkJInBhdGgiOiAiL1VzZXJzL2Rlbm55a29yc3VrZXdpdHovd29ya3NwYWNlL2Rlbm55a29yc3VrZXdpdHovZ2VuZXJhdG9yLXN1YmxpbWUtcGFja2FnZSIsCsMAAAAAAAAAHgEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAANAIAAAAAAAA0AgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					64,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAB0BAAAAAAAAHgEAAAAAAAAAAAAAHgEAAAAAAAAhAQAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAHQEAAAAAAAAdAQAAAAAAAP///////+9/"
-				],
-				[
-					65,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAAB4BAAAAAAAAHgEAAAAAAAADAAAACQkJ",
-					"AQAAAAAAAAABAAAAIQEAAAAAAAAhAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					88,
-					6,
-					"swap_line_up",
-					null,
-					"DAAAACUCAAAAAAAAJQIAAAAAAAA6AAAAICAgICAgICAgICAgImZpbGVfZXhjbHVkZV9wYXR0ZXJucyI6IFsiKi5kb2MiLCAiKi5kb2N4Il0sCgACAAAAAAAAOgIAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAADoAAAAgICAgICAgICAgICAiZmlsZV9leGNsdWRlX3BhdHRlcm5zIjogWyIqLmRvYyIsICIqLmRvY3giXSwKzQEAAAAAAAAHAgAAAAAAAAAAAADNAQAAAAAAAM0BAAAAAAAAOgAAACAgICAgICAgICAgICJmaWxlX2V4Y2x1ZGVfcGF0dGVybnMiOiBbIiouZG9jIiwgIiouZG9jeCJdLAquAQAAAAAAAOgBAAAAAAAAAAAAAK4BAAAAAAAArgEAAAAAAAA6AAAAICAgICAgICAgICAgImZpbGVfZXhjbHVkZV9wYXR0ZXJucyI6IFsiKi5kb2MiLCAiKi5kb2N4Il0sCocBAAAAAAAAwQEAAAAAAAAAAAAAhwEAAAAAAACHAQAAAAAAADoAAAAgICAgICAgICAgICAiZmlsZV9leGNsdWRlX3BhdHRlcm5zIjogWyIqLmRvYyIsICIqLmRvY3giXSwKYAEAAAAAAACaAQAAAAAAAAAAAABgAQAAAAAAAGABAAAAAAAAOgAAACAgICAgICAgICAgICJmaWxlX2V4Y2x1ZGVfcGF0dGVybnMiOiBbIiouZG9jIiwgIiouZG9jeCJdLAo7AQAAAAAAAHUBAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAQAIAAAAAAABAAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					90,
-					1,
-					"cut",
-					null,
-					"AQAAAB8BAAAAAAAAHwEAAAAAAAAcAAAACQkJLy8gZmlsZV9leGNsdWRlX3BhdHRlcm5zCg",
-					"AQAAAAAAAAABAAAAMQEAAAAAAAAxAQAAAAAAAAAAAAAAAGtA"
-				],
-				[
-					98,
-					2,
-					"swap_line_up",
-					null,
-					"BAAAAOsBAAAAAAAA6wEAAAAAAAAzAAAAICAgICAgICAgICAgImZvbGRlcl9leGNsdWRlX3BhdHRlcm5zIjogWyJiYWNrdXAiXSwKzAEAAAAAAAD/AQAAAAAAAAAAAADMAQAAAAAAAMwBAAAAAAAAMwAAACAgICAgICAgICAgICJmb2xkZXJfZXhjbHVkZV9wYXR0ZXJucyI6IFsiYmFja3VwIl0sCqUBAAAAAAAA2AEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAAwIAAAAAAAADAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					100,
-					1,
-					"cut",
-					null,
-					"AQAAAH4BAAAAAAAAfgEAAAAAAAAnAAAAICAgICAgICAgICAgLy8gZm9sZGVyX2V4Y2x1ZGVfcGF0dGVybnMK",
-					"AQAAAAAAAAABAAAAlgEAAAAAAACWAQAAAAAAAAAAAAAAAGhA"
-				],
-				[
-					103,
-					1,
-					"cut",
-					null,
-					"AQAAANgBAAAAAAAA2AEAAAAAAAAfAAAAICAgICAgICAgICAgLy8gZm9sbG93X3N5bWxpbmtzCg",
-					"AQAAAAAAAAABAAAA7gEAAAAAAADuAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					108,
-					2,
-					"cut",
-					null,
-					"AgAAAP0BAAAAAAAA/QEAAAAAAAABAAAACv0BAAAAAAAA/QEAAAAAAAAgAAAACQkJLyoiZm9sbG93X3N5bWxpbmtzIjogdHJ1ZSwqLwo",
-					"AQAAAAAAAAABAAAA/QEAAAAAAAD9AQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					119,
-					1,
-					"paste",
-					null,
-					"AQAAAH0BAAAAAAAAkwEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAfQEAAAAAAAB9AQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					122,
-					1,
-					"paste",
-					null,
-					"AQAAAO0BAAAAAAAAAwIAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA7QEAAAAAAADtAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					136,
-					1,
-					"insert",
-					{
-						"characters": "test"
-					},
-					"BQAAAPEBAAAAAAAA8gEAAAAAAAAAAAAA8gEAAAAAAADyAQAAAAAAAAUAAAAqLmRvY/IBAAAAAAAA8wEAAAAAAAAAAAAA8wEAAAAAAAD0AQAAAAAAAAAAAAD0AQAAAAAAAPUBAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA8QEAAAAAAAD2AQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					141,
-					1,
-					"insert",
-					{
-						"characters": "src"
-					},
-					"BAAAAPkBAAAAAAAA+gEAAAAAAAAAAAAA+gEAAAAAAAD6AQAAAAAAAAYAAAAqLmRvY3j6AQAAAAAAAPsBAAAAAAAAAAAAAPsBAAAAAAAA/AEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA+QEAAAAAAAD/AQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					148,
-					1,
-					"insert",
-					{
-						"characters": "json"
-					},
-					"BQAAAIMBAAAAAAAAhAEAAAAAAAAAAAAAhAEAAAAAAACEAQAAAAAAAAMAAABkb2OEAQAAAAAAAIUBAAAAAAAAAAAAAIUBAAAAAAAAhgEAAAAAAAAAAAAAhgEAAAAAAACHAQAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAgwEAAAAAAACGAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					155,
-					1,
-					"insert",
-					{
-						"characters": "md"
-					},
-					"AwAAAI0BAAAAAAAAjgEAAAAAAAAAAAAAjgEAAAAAAACOAQAAAAAAAAQAAABkb2N4jgEAAAAAAACPAQAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAjQEAAAAAAACRAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					160,
-					1,
-					"cut",
-					null,
-					"AQAAAB4BAAAAAAAAHgEAAAAAAAABAAAACg",
-					"AQAAAAAAAAABAAAAHgEAAAAAAAAeAQAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					203,
-					1,
-					"paste",
-					null,
-					"MAAAACgCAAAAAAAALAIAAAAAAAAAAAAALAIAAAAAAAAsAgAAAAAAAAEAAAAJJAIAAAAAAAAoAgAAAAAAAAAAAAAoAgAAAAAAACgCAAAAAAAAAQAAAAkjAgAAAAAAACcCAAAAAAAAAAAAACcCAAAAAAAAJwIAAAAAAAABAAAACcUAAAAAAAAAyQAAAAAAAAAAAAAAyQAAAAAAAADJAAAAAAAAAAEAAAAJxAAAAAAAAADIAAAAAAAAAAAAAADIAAAAAAAAAMgAAAAAAAAAAQAAAAnDAAAAAAAAAMcAAAAAAAAAAAAAAMcAAAAAAAAAxwAAAAAAAAABAAAACb8AAAAAAAAAwwAAAAAAAAAAAAAAwwAAAAAAAADDAAAAAAAAAAEAAAAJvgAAAAAAAADCAAAAAAAAAAAAAADCAAAAAAAAAMIAAAAAAAAAAQAAAAm6AAAAAAAAAL4AAAAAAAAAAAAAAL4AAAAAAAAAvgAAAAAAAAABAAAACbkAAAAAAAAAvQAAAAAAAAAAAAAAvQAAAAAAAAC9AAAAAAAAAAEAAAAJbQAAAAAAAABxAAAAAAAAAAAAAABxAAAAAAAAAHEAAAAAAAAAAQAAAAlsAAAAAAAAAHAAAAAAAAAAAAAAAHAAAAAAAAAAcAAAAAAAAAABAAAACWsAAAAAAAAAbwAAAAAAAAAAAAAAbwAAAAAAAABvAAAAAAAAAAEAAAAJaAAAAAAAAABsAAAAAAAAAAAAAABsAAAAAAAAAGwAAAAAAAAAAQAAAAlnAAAAAAAAAGsAAAAAAAAAAAAAAGsAAAAAAAAAawAAAAAAAAABAAAACWMAAAAAAAAAZwAAAAAAAAAAAAAAZwAAAAAAAABnAAAAAAAAAAEAAAAJYgAAAAAAAABmAAAAAAAAAAAAAABmAAAAAAAAAGYAAAAAAAAAAQAAAAkXAAAAAAAAABsAAAAAAAAAAAAAABsAAAAAAAAAGwAAAAAAAAABAAAACRYAAAAAAAAAGgAAAAAAAAAAAAAAGgAAAAAAAAAaAAAAAAAAAAEAAAAJFQAAAAAAAAAZAAAAAAAAAAAAAAAZAAAAAAAAABkAAAAAAAAAAQAAAAkSAAAAAAAAABYAAAAAAAAAAAAAABYAAAAAAAAAFgAAAAAAAAABAAAACREAAAAAAAAAFQAAAAAAAAAAAAAAFQAAAAAAAAAVAAAAAAAAAAEAAAAJDgAAAAAAAAASAAAAAAAAAAAAAAASAAAAAAAAABIAAAAAAAAAAQAAAAkCAAAAAAAAAAYAAAAAAAAAAAAAAAYAAAAAAAAABgAAAAAAAAABAAAACQ",
-					"AQAAAAAAAAAYAAAAAwAAAAAAAAACAAAAAAAAAAAAAAAAAPC/DgAAAAAAAAAPAAAAAAAAAAAAAAAAAPC/EQAAAAAAAAASAAAAAAAAAAAAAAAAAPC/EgAAAAAAAAATAAAAAAAAAAAAAAAAAPC/FQAAAAAAAAAWAAAAAAAAAAAAAAAAAPC/FgAAAAAAAAAXAAAAAAAAAAAAAAAAAPC/FwAAAAAAAAAYAAAAAAAAAAAAAAAAAPC/YgAAAAAAAABjAAAAAAAAAAAAAAAAAPC/YwAAAAAAAABkAAAAAAAAAAAAAAAAAPC/ZwAAAAAAAABoAAAAAAAAAAAAAAAAAPC/aAAAAAAAAABpAAAAAAAAAAAAAAAAAPC/awAAAAAAAABsAAAAAAAAAAAAAAAAAPC/bAAAAAAAAABtAAAAAAAAAAAAAAAAAPC/bQAAAAAAAABuAAAAAAAAAAAAAAAAAPC/uQAAAAAAAAC6AAAAAAAAAAAAAAAAAPC/ugAAAAAAAAC7AAAAAAAAAAAAAAAAAPC/vgAAAAAAAAC/AAAAAAAAAAAAAAAAAPC/vwAAAAAAAADAAAAAAAAAAAAAAAAAAPC/wwAAAAAAAADEAAAAAAAAAAAAAAAAAPC/xAAAAAAAAADFAAAAAAAAAAAAAAAAAPC/xQAAAAAAAADGAAAAAAAAAAAAAAAAAPC/IwIAAAAAAAAkAgAAAAAAAAAAAAAAAPC/JAIAAAAAAAAlAgAAAAAAAAAAAAAAAPC/KAIAAAAAAAApAgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					213,
-					1,
-					"paste",
-					null,
-					"AgAAAAAAAAAAAAAABwMAAAAAAAAAAAAABwMAAAAAAAAHAwAAAAAAAHYCAAB7CiAgICAiZm9sZGVycyI6CiAgICBbCiAgICAgICAgewogICAgICAgICAgICAicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvdG9vbHMvWm51bnktUGFja2FnZUdlbmVyYXRvciIsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJwYXRoIjogIi9Vc2Vycy9kZW5ueWtvcnN1a2V3aXR6L3dvcmtzcGFjZS9kZW5ueWtvcnN1a2V3aXR6L3N1YmxpbWUtdGVzdCIsCiAgICAgICAgfSwKICAgICAgICB7CgogICAgICAgICAgICAicGF0aCI6ICIvVXNlcnMvZGVubnlrb3JzdWtld2l0ei93b3Jrc3BhY2UvZGVubnlrb3JzdWtld2l0ei9nZW5lcmF0b3Itc3VibGltZS1wYWNrYWdlIiwKICAgICAgICAgICAgImZpbGVfZXhjbHVkZV9wYXR0ZXJucyI6IFsiKi5kb2MiLCAiKi5kb2N4Il0sCiAgICAgICAgICAgIC8vIGZpbGVfaW5jbHVkZV9wYXR0ZXJuczogWyIqLmpzb24iLCAiKi5tZCJdLAogICAgICAgICAgICAiZm9sZGVyX2V4Y2x1ZGVfcGF0dGVybnMiOiBbImJhY2t1cCJdLAogICAgICAgICAgICAvLyBmb2xkZXJfaW5jbHVkZV9wYXR0ZXJuczogWyJ0ZXN0IiwgInNyYyJdLAogICAgICAgICAgICAiZm9sbG93X3N5bWxpbmtzIjogdHJ1ZSwKICAgICAgICB9LAogICAgXSwKfQo",
-					"AQAAAAAAAAABAAAAAAAAAAAAAAB2AgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					222,
-					2,
-					"cut",
-					null,
-					"AgAAAHQCAAAAAAAAdAIAAAAAAACRAAAACiAgICAic2V0dGluZ3MiOnsKICAgICAgICJ0YWJfc2l6ZSI6IDgKICAgIH0sCiAgICAiYnVpbGRfc3lzdGVtcyI6WwogICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJMaXN0IiwKICAgICAgICAgICAgImNtZCI6IFsibHMiXQogICAgICAgfQogICAgXXQCAAAAAAAAdAIAAAAAAAABAAAACg",
-					"AQAAAAAAAAABAAAABQMAAAAAAAB0AgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					233,
-					1,
-					"cut",
-					null,
-					"AQAAABAAAAAAAAAAEAAAAAAAAAAFAAAACiAgICA",
-					"AQAAAAAAAAABAAAAFQAAAAAAAAAQAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					241,
-					1,
-					"reindent",
-					null,
-					"AQAAAPMAAAAAAAAA/AAAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA8wAAAAAAAADzAAAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					242,
-					1,
-					"paste",
-					null,
-					"AQAAAPwAAAAAAAAAMQEAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAA/AAAAAAAAAD8AAAAAAAAAAAAAAAAAPC/"
-				]
-			]
-		},
-		{
-			"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/index.js",
-			"settings":
-			{
-				"buffer_size": 2295,
-				"encoding": "UTF-8",
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					7,
-					1,
-					"paste",
-					null,
-					"AgAAAHgHAAAAAAAAfwcAAAAAAAAAAAAAfwcAAAAAAAB/BwAAAAAAAAgAAABjb21tYW5kcw",
-					"AQAAAAAAAAABAAAAeAcAAAAAAACABwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					9,
-					1,
-					"insert",
-					{
-						"characters": "s"
-					},
-					"AQAAAH8HAAAAAAAAgAcAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAfwcAAAAAAAB/BwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					25,
-					1,
-					"paste",
-					null,
-					"BgAAAKMHAAAAAAAAqgcAAAAAAAAAAAAAqgcAAAAAAACqBwAAAAAAAAgAAABjb21tYW5kc1AHAAAAAAAAVwcAAAAAAAAAAAAAVwcAAAAAAABXBwAAAAAAAAgAAABjb21tYW5kcz8HAAAAAAAARgcAAAAAAAAAAAAARgcAAAAAAABGBwAAAAAAAAgAAABjb21tYW5kcw",
-					"AQAAAAAAAAADAAAAPwcAAAAAAABHBwAAAAAAAAAAAAAAAPC/UAcAAAAAAABYBwAAAAAAAAAAAAAAAPC/owcAAAAAAACrBwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					40,
-					1,
-					"insert",
-					{
-						"characters": "\n\n"
-					},
-					"BQAAAMkGAAAAAAAAygYAAAAAAAAAAAAAygYAAAAAAADOBgAAAAAAAAAAAADOBgAAAAAAAM8GAAAAAAAAAAAAAM8GAAAAAAAA0wYAAAAAAAAAAAAAygYAAAAAAADKBgAAAAAAAAQAAAAgICAg",
-					"AQAAAAAAAAABAAAAyQYAAAAAAADJBgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					42,
-					1,
-					"cut",
-					null,
-					"AQAAAMsGAAAAAAAAywYAAAAAAAAFAAAAICAgIAo",
-					"AQAAAAAAAAABAAAAzwYAAAAAAADPBgAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					48,
-					1,
-					"insert",
-					{
-						"characters": "\n\n"
-					},
-					"BQAAAI0DAAAAAAAAjgMAAAAAAAAAAAAAjgMAAAAAAACQAwAAAAAAAAAAAACQAwAAAAAAAJEDAAAAAAAAAAAAAJEDAAAAAAAAkwMAAAAAAAAAAAAAjgMAAAAAAACOAwAAAAAAAAIAAAAgIA",
-					"AQAAAAAAAAABAAAAjQMAAAAAAACNAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					50,
-					1,
-					"insert",
-					{
-						"characters": "c"
-					},
-					"AQAAAJEDAAAAAAAAkgMAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAkQMAAAAAAACRAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					51,
-					1,
-					"insert_completion",
-					{
-						"completion": "console.log('$1');",
-						"format": "snippet",
-						"keep_prefix": false,
-						"must_insert": false,
-						"trigger": "console.log"
-					},
-					"AgAAAJEDAAAAAAAAkQMAAAAAAAABAAAAY5EDAAAAAAAAoQMAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAkgMAAAAAAACSAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					52,
-					1,
-					"insert",
-					{
-						"characters": "c"
-					},
-					"AQAAAJ4DAAAAAAAAnwMAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAngMAAAAAAACeAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					53,
-					1,
-					"insert_completion",
-					{
-						"completion": "config",
-						"format": "text",
-						"keep_prefix": false,
-						"must_insert": false,
-						"trigger": "config"
-					},
-					"AgAAAJ4DAAAAAAAAngMAAAAAAAABAAAAY54DAAAAAAAApAMAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAnwMAAAAAAACfAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					54,
-					1,
-					"duplicate_line",
-					null,
-					"AQAAAKgDAAAAAAAAwQMAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAApAMAAAAAAACkAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					58,
-					1,
-					"left_delete",
-					null,
-					"AQAAALYDAAAAAAAAtgMAAAAAAAABAAAAJw",
-					"AQAAAAAAAAABAAAAtwMAAAAAAAC3AwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					61,
-					1,
-					"left_delete",
-					null,
-					"AQAAALsDAAAAAAAAuwMAAAAAAAABAAAAZw",
-					"AQAAAAAAAAABAAAAvAMAAAAAAAC8AwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					62,
-					1,
-					"right_delete",
-					null,
-					"AQAAALsDAAAAAAAAuwMAAAAAAAABAAAAJw",
-					"AQAAAAAAAAABAAAAuwMAAAAAAAC7AwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					63,
-					1,
-					"insert",
-					{
-						"characters": "g"
-					},
-					"AQAAALsDAAAAAAAAvAMAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAuwMAAAAAAAC7AwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					73,
-					2,
-					"swap_line_up",
-					null,
-					"BAAAAI8DAAAAAAAAjwMAAAAAAAAwAAAAICBjb25zb2xlLmxvZygnY29uZmlnJyk7CiAgY29uc29sZS5sb2coY29uZmlnKTsKjgMAAAAAAAC+AwAAAAAAAAAAAACOAwAAAAAAAI4DAAAAAAAAMAAAACAgY29uc29sZS5sb2coJ2NvbmZpZycpOwogIGNvbnNvbGUubG9nKGNvbmZpZyk7CooDAAAAAAAAugMAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAkwMAAAAAAACtAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					74,
-					1,
-					"indent",
-					null,
-					"AgAAAIoDAAAAAAAAjAMAAAAAAAAAAAAApQMAAAAAAACnAwAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAjgMAAAAAAACoAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					77,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAIkDAAAAAAAAigMAAAAAAAAAAAAAigMAAAAAAACOAwAAAAAAAAAAAAA",
-					"AQAAAAAAAAABAAAAiQMAAAAAAACJAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					78,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAAIoDAAAAAAAAigMAAAAAAAAEAAAAICAgIA",
-					"AQAAAAAAAAABAAAAjgMAAAAAAACOAwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					95,
-					1,
-					"paste",
-					null,
-					"AgAAAL0HAAAAAAAAzgcAAAAAAAAAAAAAzgcAAAAAAADOBwAAAAAAABEAAABjb21tYW5kX2ZpbGVfbmFtZQ",
-					"AQAAAAAAAAABAAAAvQcAAAAAAADOBwAAAAAAAAAAAAAAAPC/"
-				],
-				[
-					104,
-					1,
-					"cut",
-					null,
-					"AQAAAAAHAAAAAAAAAAcAAAAAAAABAAAACg",
-					"AQAAAAAAAAABAAAAAAcAAAAAAAAABwAAAAAAAAAAAAAAAPC/"
-				]
-			]
-		},
-		{
-			"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/VariableCheck.pm",
-			"settings":
-			{
-				"buffer_size": 12140,
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					16,
-					1,
-					"revert",
-					null,
-					"AgAAAAAAAAAAAAAAAAAAAAAAAABsLwAAIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgRXhwb3J0ZXIgcXcoaW1wb3J0KTsKdXNlIFBhY2thZ2U6OlN0YXNoOwoKbXkgQFRhZ3MgPSBQYWNrYWdlOjpTdGFzaC0+bmV3KCdLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjaycpLT5saXN0X2FsbF9zeW1ib2xzKCdDT0RFJyk7CgpvdXIgJUVYUE9SVF9UQUdTID0gKCAgICAjIyBubyBjcml0aWMKICAgIGFsbCA9PiBcQFRhZ3MsCik7CkV4cG9ydGVyOjpleHBvcnRfb2tfdGFncygnYWxsJyk7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgLSBoZWxwZXIgZnVuY3Rpb25zIHRvIGNoZWNrIHZhcmlhYmxlcwoKPWhlYWQxIERFU0NSSVBUSU9OCgpQcm92aWRlcyBzZXZlcmFsIGhlbHBlciBmdW5jdGlvbnMgdG8gY2hlY2sgdmFyaWFibGVzLCBlLmcuCmlmIGEgdmFyaWFibGUgaXMgYSBzdHJpbmcsIGEgaGFzaCByZWYgZXRjLiBUaGlzIGlzIGhlbHBmdWwgZm9yCmlucHV0IGRhdGEgdmFsaWRhdGlvbiwgZm9yIGV4YW1wbGUuCgpDYWxsIHRoaXMgbW9kdWxlIGRpcmVjdGx5IHdpdGhvdXQgaW5zdGFudGlhdGluZzoKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7ICAgICAgICAgICAgICMgZXhwb3J0IGFsbCBmdW5jdGlvbnMgaW50byB0aGUgY2FsbGluZyBwYWNrYWdlCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNIYXNoUmVmV2l0RGF0YSk7ICMgZXhwb3J0IGp1c3Qgb25lIGZ1bmN0aW9uCgogICAgaWYgKElzSGFzaFJlZldpdGhEYXRhKCRIYXNoUmVmKSkgewogICAgICAgICMgLi4uCiAgICB9CgpUaGUgZnVuY3Rpb25zIGNhbiBiZSBncm91cGVkIGFzIGZvbGxvd3M6Cgo9aGVhZDIgVmFyaWFibGUgdHlwZSBjaGVja3MKCj1vdmVyIDQKCj1pdGVtICogTDwvSXNTdHJpbmcoKT4KCj1pdGVtICogTDwvSXNTdHJpbmdXaXRoRGF0YSgpPgoKPWl0ZW0gKiBMPC9Jc0FycmF5UmVmV2l0aERhdGEoKT4KCj1pdGVtICogTDwvSXNIYXNoUmVmV2l0aERhdGEoKT4KCj1iYWNrCgo9aGVhZDIgTnVtYmVyIGNoZWNrcwoKPW92ZXIgNAoKPWl0ZW0gKiBMPC9Jc051bWJlcigpPgoKPWl0ZW0gKiBMPC9Jc0ludGVnZXIoKT4KCj1pdGVtICogTDwvSXNQb3NpdGl2ZUludGVnZXIoKT4KCj1iYWNrCgo9aGVhZDIgU3BlY2lhbCBkYXRhIGZvcm1hdCBjaGVja3MKCj1vdmVyIDQKCj1pdGVtICogTDwvSXNJUHY0QWRkcmVzcygpPgoKPWl0ZW0gKiBMPC9Jc0lQdjZBZGRyZXNzKCk+Cgo9aXRlbSAqIEw8L0lzTUQ1U3VtKCk+Cgo9YmFjawoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBJc1N0cmluZygpCgp0ZXN0IHN1cHBsaWVkIGRhdGEgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgc3RyaW5nIC0gYW4gZW1wdHkgc3RyaW5nIGlzIHZhbGlkCgpyZXR1cm5zIDEgaWYgZGF0YSBtYXRjaGVzIGNyaXRlcmlhIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRSZXN1bHQgPSBJc1N0cmluZygKICAgICAgICAnYWJjJywgIyBkYXRhIHRvIGJlIHRlc3RlZAogICAgKTsKCj1jdXQKCiMjIG5vIGNyaXRpYyAoUGVybDo6Q3JpdGljOjpQb2xpY3k6OlN1YnJvdXRpbmVzOjpSZXF1aXJlQXJnVW5wYWNraW5nKQoKc3ViIElzU3RyaW5nIHsKICAgIG15ICRUZXN0RGF0YSA9ICRfWzBdOwoKICAgIHJldHVybiBpZiBzY2FsYXIgQF8gbmUgMTsKICAgIHJldHVybiBpZiByZWYgJFRlc3REYXRhOwogICAgcmV0dXJuIGlmICFkZWZpbmVkICRUZXN0RGF0YTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIElzU3RyaW5nV2l0aERhdGEoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIG5vbiB6ZXJvLWxlbmd0aCBzdHJpbmcKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzU3RyaW5nV2l0aERhdGEoCiAgICAgICAgJ2FiYycsICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICk7Cgo9Y3V0CgpzdWIgSXNTdHJpbmdXaXRoRGF0YSB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgIUlzU3RyaW5nKEBfKTsKICAgIHJldHVybiBpZiAkVGVzdERhdGEgZXEgJyc7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBJc0FycmF5UmVmV2l0aERhdGEoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhbiBhcnJheSByZWZlcmVuY2UgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBrZXkKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzQXJyYXlSZWZXaXRoRGF0YSgKICAgICAgICBbICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICAgICAgICAgJ2tleScsCiAgICAgICAgICAgICMgLi4uCiAgICAgICAgXSwKICAgICk7Cgo9Y3V0CgpzdWIgSXNBcnJheVJlZldpdGhEYXRhIHsKICAgIG15ICRUZXN0RGF0YSA9ICRfWzBdOwoKICAgIHJldHVybiBpZiBzY2FsYXIgQF8gbmUgMTsKICAgIHJldHVybiBpZiByZWYgJFRlc3REYXRhIG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgIUB7JFRlc3REYXRhfTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIElzSGFzaFJlZldpdGhEYXRhKCkKCnRlc3Qgc3VwcGxpZWQgZGF0YSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBoYXNoIHJlZmVyZW5jZSBhbmQgY29udGFpbnMgYXQgbGVhc3Qgb25lIGtleS92YWx1ZSBwYWlyCgpyZXR1cm5zIDEgaWYgZGF0YSBtYXRjaGVzIGNyaXRlcmlhIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRSZXN1bHQgPSBJc0hhc2hSZWZXaXRoRGF0YSgKICAgICAgICB7ICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICAgICAgICAgJ2tleScgPT4gJ3ZhbHVlJywKICAgICAgICAgICAgIyAuLi4KICAgICAgICB9LAogICAgKTsKCj1jdXQKCnN1YiBJc0hhc2hSZWZXaXRoRGF0YSB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgc2NhbGFyIEBfIG5lIDE7CiAgICByZXR1cm4gaWYgcmVmICRUZXN0RGF0YSBuZSAnSEFTSCc7CiAgICByZXR1cm4gaWYgISV7JFRlc3REYXRhfTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIElzTnVtYmVyKCkKCnRlc3Qgc3VwcGxpZWQgZGF0YSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBudW1iZXIKKGludGVnZXIsIGZsb2F0aW5nIHBvaW50LCBwb3NzaWJsZSBleHBvbmVudCwgcG9zaXRpdmUgb3IgbmVnYXRpdmUpCgpyZXR1cm5zIDEgaWYgZGF0YSBtYXRjaGVzIGNyaXRlcmlhIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRSZXN1bHQgPSBJc051bWJlcigKICAgICAgICA5OTksICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICk7Cgo9Y3V0CgpzdWIgSXNOdW1iZXIgewogICAgbXkgJFRlc3REYXRhID0gJF9bMF07CgogICAgcmV0dXJuIGlmICFJc1N0cmluZ1dpdGhEYXRhKEBfKTsKICAgIHJldHVybiBpZiAkVGVzdERhdGEgIX4gbXsKICAgICAgICBcQSBbLV0/ICg/OiBcZCsgfCBcZCogWy5dIFxkKyB8ICg/OiBcZCsgWy5dPyBcZCogfCBcZCogWy5dIFxkKyApIFtlRV0gWy0rXT8gXGQqICkgXHoKICAgIH14bXM7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBJc0ludGVnZXIoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhbiBpbnRlZ2VyIChvbmx5IGRpZ2l0cywgcG9zaXRpdmUgb3IgbmVnYXRpdmUpCgpyZXR1cm5zIDEgaWYgZGF0YSBtYXRjaGVzIGNyaXRlcmlhIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRSZXN1bHQgPSBJc0ludGVnZXIoCiAgICAgICAgOTk5LCAjIGRhdGEgdG8gYmUgdGVzdGVkCiAgICApOwoKPWN1dAoKc3ViIElzSW50ZWdlciB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgIUlzU3RyaW5nV2l0aERhdGEoQF8pOwogICAgcmV0dXJuIGlmICRUZXN0RGF0YSAhfiBteyBcQSBbLV0/ICg/OiAwIHwgWzEtOV0gXGQqICkgXHogfXhtczsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIElzUG9zaXRpdmVJbnRlZ2VyKCkKCnRlc3Qgc3VwcGxpZWQgZGF0YSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIChvbmx5IGRpZ2l0cyBhbmQgcG9zaXRpdmUpCgpyZXR1cm5zIDEgaWYgZGF0YSBtYXRjaGVzIGNyaXRlcmlhIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRSZXN1bHQgPSBJc1Bvc2l0aXZlSW50ZWdlcigKICAgICAgICA5OTksICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICk7Cgo9Y3V0CgpzdWIgSXNQb3NpdGl2ZUludGVnZXIgewogICAgbXkgJFRlc3REYXRhID0gJF9bMF07CgogICAgcmV0dXJuIGlmICFJc1N0cmluZ1dpdGhEYXRhKEBfKTsKICAgIHJldHVybiBpZiAkVGVzdERhdGEgIX4gbXsgXEEgWzEtOV0gXGQqIFx6IH14bXM7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBJc0lQdjRBZGRyZXNzKCkKCnRlc3Qgc3VwcGxpZWQgZGF0YSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSB2YWxpZCBJUHY0IGFkZHJlc3MgKHN5bnRheCBjaGVjayBvbmx5KQoKcmV0dXJucyAxIGlmIGRhdGEgbWF0Y2hlcyBjcml0ZXJpYSBvciB1bmRlZiBvdGhlcndpc2UKCiAgICBteSAkUmVzdWx0ID0gSXNJUHY0QWRkcmVzcygKICAgICAgICAnMTkyLjE2OC4wLjEnLCAjIGRhdGEgdG8gYmUgdGVzdGVkCiAgICApOwoKPWN1dAoKc3ViIElzSVB2NEFkZHJlc3MgewogICAgbXkgJFRlc3REYXRhID0gJF9bMF07CgogICAgcmV0dXJuIGlmICFJc1N0cmluZ1dpdGhEYXRhKEBfKTsKICAgIHJldHVybiBpZiAkVGVzdERhdGEgIX4gbXsgXEEgW1xkXC5dKyBceiB9eG1zOwogICAgbXkgQFBhcnQgPSBzcGxpdCAnXC4nLCAkVGVzdERhdGE7CgogICAgIyBmb3VyIHBhcnRzIGRlbGltaXRlZCBieSAnLicgbmVlZGVkCiAgICByZXR1cm4gaWYgc2NhbGFyIEBQYXJ0IG5lIDQ7CiAgICBmb3IgbXkgJFBhcnQgKEBQYXJ0KSB7CgogICAgICAgICMgYWxsb3cgbnVtYmVycyAwIHRvIDI1NSwgbm8gbGVhZGluZyB6ZXJvZXMKICAgICAgICByZXR1cm4gaWYgJFBhcnQgIX4gbXsKICAgICAgICAgICAgXEEgKD86IFxkIHwgWzEtOV0gXGQgfCBbMV0gXGR7Mn0gfCBbMl1bMC00XVxkIHwgWzJdWzVdWzAtNV0gKSBcegogICAgICAgIH14bXM7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBJc0lQdjZBZGRyZXNzKCkKCnRlc3Qgc3VwcGxpZWQgZGF0YSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgYSB2YWxpZCBJUHY2IGFkZHJlc3MgKHN5bnRheCBjaGVjayBvbmx5KQpzaG9ydGhhbmQgbm90YXRpb24gYW5kIG1peGVkIElQdjYvSVB2NCBub3RhdGlvbiBhbGxvd2VkCiMgRklYTUUgSVB2Ni9JUHY0IG5vdGF0aW9uIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkCgpyZXR1cm5zIDEgaWYgZGF0YSBtYXRjaGVzIGNyaXRlcmlhIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRSZXN1bHQgPSBJc0lQdjZBZGRyZXNzKAogICAgICAgICcwMDAwOjExMTE6MjIyMjozMzMzOjQ0NDQ6NTU1NTo2NjY2Ojc3NzcnLCAjIGRhdGEgdG8gYmUgdGVzdGVkCiAgICApOwoKPWN1dAoKc3ViIElzSVB2NkFkZHJlc3MgewogICAgbXkgJFRlc3REYXRhID0gJF9bMF07CgogICAgcmV0dXJuIGlmICFJc1N0cmluZ1dpdGhEYXRhKEBfKTsKCiAgICAjIG9ubHkgaGV4IGNoYXJhY3RlcnMgKDAtOSxBLVopIHBsdXMgc2VwYXJhdG9yICc6JyBhbGxvd2VkCiAgICByZXR1cm4gaWYgJFRlc3REYXRhICF+IG17IFxBIFtcZGEtZjpdKyBceiB9eG1zaTsKCiAgICAjIHNwZWNpYWwgY2FzZSAtIGVxdWFscyBvbmx5IHplcm9lcwogICAgcmV0dXJuIDEgaWYgJFRlc3REYXRhIGVxICc6Oic7CgogICAgIyBzcGVjaWFsIGNhc2VzIC0gYWRkcmVzcyBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCBzaW5nbGUgJzonCiAgICByZXR1cm4gaWYgJFRlc3REYXRhID1+IG17IFxBIDogW146XSB9eG1zOwogICAgcmV0dXJuIGlmICRUZXN0RGF0YSA9fiBteyBbXjpdIDogXHogfXhtczsKCiAgICAjIHNwZWNpYWwgY2FzZSAtIGFkZHJlc3MgbXVzdCBub3Qgc3RhcnQgYW5kIGVuZCB3aXRoICc6JwogICAgcmV0dXJuIGlmICRUZXN0RGF0YSA9fiBteyBcQSA6IC4rIDogXHogfXhtczsKCiAgICBteSAkU2tpcEZpcnN0OwogICAgaWYgKCAkVGVzdERhdGEgPX4gbXsgXEEgOjogfXhtcyApIHsKICAgICAgICAkVGVzdERhdGEgID0gJ1gnIC4gJFRlc3REYXRhOwogICAgICAgICRTa2lwRmlyc3QgPSAxOwogICAgfQogICAgbXkgJFNraXBMYXN0OwogICAgaWYgKCAkVGVzdERhdGEgPX4gbXsgOjogXHogfXhtcyApIHsKICAgICAgICAkVGVzdERhdGEgLj0gJ1gnOwogICAgICAgICRTa2lwTGFzdCA9IDE7CiAgICB9CiAgICBteSBAUGFydCA9IHNwbGl0ICc6JywgJFRlc3REYXRhOwogICAgaWYgKCRTa2lwRmlyc3QpIHsKICAgICAgICBzaGlmdCBAUGFydDsKICAgIH0KICAgIGlmICgkU2tpcExhc3QpIHsKICAgICAgICBkZWxldGUgJFBhcnRbLTFdOwogICAgfQogICAgcmV0dXJuIGlmIHNjYWxhciBAUGFydCA8IDIgfHwgc2NhbGFyIEBQYXJ0ID4gODsKICAgIHJldHVybiBpZiBzY2FsYXIgQFBhcnQgbmUgOCAmJiAkVGVzdERhdGEgIX4gbXsgOjogfXhtczsKCiAgICAjIGhhbmRsZSBmdWxsIGFkZHJlc2VzCiAgICBpZiAoIHNjYWxhciBAUGFydCBlcSA4ICkgewogICAgICAgIG15ICRFbXB0eVBhcnQ7CiAgICAgICAgUEFSVDoKICAgICAgICBmb3IgbXkgJFBhcnQgKEBQYXJ0KSB7CiAgICAgICAgICAgIGlmICggJFBhcnQgZXEgJycgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaWYgJEVtcHR5UGFydDsKICAgICAgICAgICAgICAgICRFbXB0eVBhcnQgPSAxOwogICAgICAgICAgICAgICAgbmV4dCBQQVJUOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpZiAkUGFydCAhfiBteyBcQSBbXGRhLWZdezEsNH0gXHogfXhtc2k7CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlIHNob3J0aGFuZCBhZGRyZXNzZXMKICAgIG15ICRTaG9ydEhhbmRVc2VkOwogICAgUEFSVDoKICAgIGZvciBteSAkUGFydCAoQFBhcnQpIHsKICAgICAgICBuZXh0IFBBUlQgaWYgJFBhcnQgZXEgJ1gnOwoKICAgICAgICAjIGVtcHR5IHBhcnQgbWVhbnMgc2hvcnRoYW5kIC0gZG8gd2UgYWxyZWFkeSBoYXZlIG1vcmUgdGhhbiBvbmUgY29uc2VjdXRpdmUgZW1wdHkgcGFydHM/CiAgICAgICAgcmV0dXJuIGlmICRQYXJ0IGVxICcnICYmICRTaG9ydEhhbmRVc2VkOwogICAgICAgIGlmICggJFBhcnQgZXEgJycgKSB7CiAgICAgICAgICAgICRTaG9ydEhhbmRVc2VkID0gMTsKICAgICAgICAgICAgbmV4dCBQQVJUOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaWYgJFBhcnQgIX4gbXsgXEEgW1xkYS1mXXsxLDR9IFx6IH14bXNpOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgSXNNRDVTdW0oKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhbiBDPE1ENT4gc3VtICgzMiBoZXggY2hhcmFjdGVycykKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzTUQ1U3VtKAogICAgICAgICc2ZjFlZDAwMmFiNTU5NTg1OTAxNGViZjA5NTE1MjJkOScsICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICk7Cgo9Y3V0CgpzdWIgSXNNRDVTdW0gewogICAgbXkgJFRlc3REYXRhID0gJF9bMF07CgogICAgcmV0dXJuIGlmICFJc1N0cmluZ1dpdGhEYXRhKEBfKTsKICAgIHJldHVybiBpZiAkVGVzdERhdGEgIX4gbXsgXEEgW1xkYS1mXXszMn0gXHogfXhtc2k7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBEYXRhSXNEaWZmZXJlbnQoKQoKY29tcGFyZXMgdHdvIGRhdGEgc3RydWN0dXJlcyB3aXRoIGVhY2ggb3RoZXIuIFJldHVybnMgMSBpZgp0aGV5IGFyZSBkaWZmZXJlbnQsIHVuZGVmIG90aGVyd2lzZS4KCkRhdGEgcGFyYW1ldGVycyBuZWVkIHRvIGJlIHBhc3NlZCBieSByZWZlcmVuY2UgYW5kIGNhbiBiZSBTQ0FMQVIsCkFSUkFZIG9yIEhBU0guCgogICAgbXkgJERhdGFJc0RpZmZlcmVudCA9IERhdGFJc0RpZmZlcmVudCgKICAgICAgICBEYXRhMSA9PiBcJERhdGExLAogICAgICAgIERhdGEyID0+IFwkRGF0YTIsCiAgICApOwoKPWN1dAoKc3ViIERhdGFJc0RpZmZlcmVudCB7CiAgICBteSAoJVBhcmFtKSA9IEBfOwoKICAgICMgJycKICAgIGlmICggcmVmICRQYXJhbXtEYXRhMX0gZXEgJycgJiYgcmVmICRQYXJhbXtEYXRhMn0gZXEgJycgKSB7CgogICAgICAgICMgZG8gbm90aGluZywgaXQncyBvawogICAgICAgIHJldHVybiBpZiAhZGVmaW5lZCAkUGFyYW17RGF0YTF9ICYmICFkZWZpbmVkICRQYXJhbXtEYXRhMn07CgogICAgICAgICMgcmV0dXJuIGRpZmYsIGJlY2F1c2UgaXRzIGRpZmZlcmVudAogICAgICAgIHJldHVybiAxIGlmICFkZWZpbmVkICRQYXJhbXtEYXRhMX0gfHwgIWRlZmluZWQgJFBhcmFte0RhdGEyfTsKCiAgICAgICAgIyByZXR1cm4gZGlmZiwgYmVjYXVzZSBpdHMgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuIDEgaWYgJFBhcmFte0RhdGExfSBuZSAkUGFyYW17RGF0YTJ9OwoKICAgICAgICAjIHJldHVybiwgYmVjYXVzZSBpdHMgbm90IGRpZmZlcmVudAogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIFNDQUxBUgogICAgaWYgKCByZWYgJFBhcmFte0RhdGExfSBlcSAnU0NBTEFSJyAmJiByZWYgJFBhcmFte0RhdGEyfSBlcSAnU0NBTEFSJyApIHsKCiAgICAgICAgIyBkbyBub3RoaW5nLCBpdCdzIG9rCiAgICAgICAgcmV0dXJuIGlmICFkZWZpbmVkICR7ICRQYXJhbXtEYXRhMX0gfSAmJiAhZGVmaW5lZCAkeyAkUGFyYW17RGF0YTJ9IH07CgogICAgICAgICMgcmV0dXJuIGRpZmYsIGJlY2F1c2UgaXRzIGRpZmZlcmVudAogICAgICAgIHJldHVybiAxIGlmICFkZWZpbmVkICR7ICRQYXJhbXtEYXRhMX0gfSB8fCAhZGVmaW5lZCAkeyAkUGFyYW17RGF0YTJ9IH07CgogICAgICAgICMgcmV0dXJuIGRpZmYsIGJlY2F1c2UgaXRzIGRpZmZlcmVudAogICAgICAgIHJldHVybiAxIGlmICR7ICRQYXJhbXtEYXRhMX0gfSBuZSAkeyAkUGFyYW17RGF0YTJ9IH07CgogICAgICAgICMgcmV0dXJuLCBiZWNhdXNlIGl0cyBub3QgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgQVJSQVkKICAgIGlmICggcmVmICRQYXJhbXtEYXRhMX0gZXEgJ0FSUkFZJyAmJiByZWYgJFBhcmFte0RhdGEyfSBlcSAnQVJSQVknICkgewogICAgICAgIG15IEBBID0gQHsgJFBhcmFte0RhdGExfSB9OwogICAgICAgIG15IEBCID0gQHsgJFBhcmFte0RhdGEyfSB9OwoKICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb3VudCBpcyBkaWZmZXJlbnQKICAgICAgICByZXR1cm4gMSBpZiAkI0EgbmUgJCNCOwoKICAgICAgICAjIGNvbXBhcmUgYXJyYXkKICAgICAgICBDT1VOVDoKICAgICAgICBmb3IgbXkgJENvdW50ICggMCAuLiAkI0EgKSB7CgogICAgICAgICAgICAjIGRvIG5vdGhpbmcsIGl0J3Mgb2sKICAgICAgICAgICAgbmV4dCBDT1VOVCBpZiAhZGVmaW5lZCAkQVskQ291bnRdICYmICFkZWZpbmVkICRCWyRDb3VudF07CgogICAgICAgICAgICAjIHJldHVybiBkaWZmLCBiZWNhdXNlIGl0cyBkaWZmZXJlbnQKICAgICAgICAgICAgcmV0dXJuIDEgaWYgIWRlZmluZWQgJEFbJENvdW50XSB8fCAhZGVmaW5lZCAkQlskQ291bnRdOwoKICAgICAgICAgICAgaWYgKCAkQVskQ291bnRdIG5lICRCWyRDb3VudF0gKSB7CiAgICAgICAgICAgICAgICBpZiAoIHJlZiAkQVskQ291bnRdIGVxICdBUlJBWScgfHwgcmVmICRBWyRDb3VudF0gZXEgJ0hBU0gnICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAxIGlmIERhdGFJc0RpZmZlcmVudCgKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YTEgPT4gJEFbJENvdW50XSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YTIgPT4gJEJbJENvdW50XQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBDT1VOVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIEhBU0gKICAgIGlmICggcmVmICRQYXJhbXtEYXRhMX0gZXEgJ0hBU0gnICYmIHJlZiAkUGFyYW17RGF0YTJ9IGVxICdIQVNIJyApIHsKICAgICAgICBteSAlQSA9ICV7ICRQYXJhbXtEYXRhMX0gfTsKICAgICAgICBteSAlQiA9ICV7ICRQYXJhbXtEYXRhMn0gfTsKCiAgICAgICAgIyBjb21wYXJlICVBIHdpdGggJUIgYW5kIHJlbW92ZSBpdCBpZiBjaGVja2VkCiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVBICkgewoKICAgICAgICAgICAgIyBDaGVjayBpZiBib3RoIGFyZSB1bmRlZmluZWQKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkQXskS2V5fSAmJiAhZGVmaW5lZCAkQnskS2V5fSApIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQXskS2V5fTsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQnskS2V5fTsKICAgICAgICAgICAgICAgIG5leHQgS0VZOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJldHVybiBkaWZmLCBiZWNhdXNlIGl0cyBkaWZmZXJlbnQKICAgICAgICAgICAgcmV0dXJuIDEgaWYgIWRlZmluZWQgJEF7JEtleX0gfHwgIWRlZmluZWQgJEJ7JEtleX07CgogICAgICAgICAgICBpZiAoICRBeyRLZXl9IGVxICRCeyRLZXl9ICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRBeyRLZXl9OwogICAgICAgICAgICAgICAgZGVsZXRlICRCeyRLZXl9OwogICAgICAgICAgICAgICAgbmV4dCBLRVk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmV0dXJuIGlmIHZhbHVlcyBhcmUgZGlmZmVyZW50CiAgICAgICAgICAgIGlmICggcmVmICRBeyRLZXl9IGVxICdBUlJBWScgfHwgcmVmICRBeyRLZXl9IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxIGlmIERhdGFJc0RpZmZlcmVudCgKICAgICAgICAgICAgICAgICAgICBEYXRhMSA9PiAkQXskS2V5fSwKICAgICAgICAgICAgICAgICAgICBEYXRhMiA9PiAkQnskS2V5fQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQXskS2V5fTsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQnskS2V5fTsKICAgICAgICAgICAgICAgIG5leHQgS0VZOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayByZXN0CiAgICAgICAgcmV0dXJuIDEgaWYgJUI7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggcmVmICRQYXJhbXtEYXRhMX0gZXEgJ1JFRicgJiYgcmVmICRQYXJhbXtEYXRhMn0gZXEgJ1JFRicgKSB7CiAgICAgICAgcmV0dXJuIDEgaWYgRGF0YUlzRGlmZmVyZW50KAogICAgICAgICAgICBEYXRhMSA9PiAkeyAkUGFyYW17RGF0YTF9IH0sCiAgICAgICAgICAgIERhdGEyID0+ICR7ICRQYXJhbXtEYXRhMn0gfQogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAoAAAAAAAAAAFwvAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					17,
-					1,
-					"revert",
-					null,
-					"AwAAAAAAAAAAAAAAAAAAAAAAAABcLwAAIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBFeHBvcnRlciBxdyhpbXBvcnQpOwp1c2UgUGFja2FnZTo6U3Rhc2g7CgpteSBAVGFncyA9IFBhY2thZ2U6OlN0YXNoLT5uZXcoJ0tlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrJyktPmxpc3RfYWxsX3N5bWJvbHMoJ0NPREUnKTsKCm91ciAlRVhQT1JUX1RBR1MgPSAoICAgICMjIG5vIGNyaXRpYwogICAgYWxsID0+IFxAVGFncywKKTsKRXhwb3J0ZXI6OmV4cG9ydF9va190YWdzKCdhbGwnKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayAtIGhlbHBlciBmdW5jdGlvbnMgdG8gY2hlY2sgdmFyaWFibGVzCgo9aGVhZDEgREVTQ1JJUFRJT04KClByb3ZpZGVzIHNldmVyYWwgaGVscGVyIGZ1bmN0aW9ucyB0byBjaGVjayB2YXJpYWJsZXMsIGUuZy4KaWYgYSB2YXJpYWJsZSBpcyBhIHN0cmluZywgYSBoYXNoIHJlZiBldGMuIFRoaXMgaXMgaGVscGZ1bCBmb3IKaW5wdXQgZGF0YSB2YWxpZGF0aW9uLCBmb3IgZXhhbXBsZS4KCkNhbGwgdGhpcyBtb2R1bGUgZGlyZWN0bHkgd2l0aG91dCBpbnN0YW50aWF0aW5nOgoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsgICAgICAgICAgICAgIyBleHBvcnQgYWxsIGZ1bmN0aW9ucyBpbnRvIHRoZSBjYWxsaW5nIHBhY2thZ2UKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0hhc2hSZWZXaXREYXRhKTsgIyBleHBvcnQganVzdCBvbmUgZnVuY3Rpb24KCiAgICBpZiAoSXNIYXNoUmVmV2l0aERhdGEoJEhhc2hSZWYpKSB7CiAgICAgICAgLi4uCiAgICB9CgpUaGUgZnVuY3Rpb25zIGNhbiBiZSBncm91cGVkIGFzIGZvbGxvd3M6Cgo9aGVhZDIgVmFyaWFibGUgdHlwZSBjaGVja3MKCj1vdmVyIDQKCj1pdGVtICogTDwvSXNTdHJpbmcoKT4KCj1pdGVtICogTDwvSXNTdHJpbmdXaXRoRGF0YSgpPgoKPWl0ZW0gKiBMPC9Jc0FycmF5UmVmV2l0aERhdGEoKT4KCj1pdGVtICogTDwvSXNIYXNoUmVmV2l0aERhdGEoKT4KCj1iYWNrCgo9aGVhZDIgTnVtYmVyIGNoZWNrcwoKPW92ZXIgNAoKPWl0ZW0gKiBMPC9Jc051bWJlcigpPgoKPWl0ZW0gKiBMPC9Jc0ludGVnZXIoKT4KCj1pdGVtICogTDwvSXNQb3NpdGl2ZUludGVnZXIoKT4KCj1iYWNrCgo9aGVhZDIgU3BlY2lhbCBkYXRhIGZvcm1hdCBjaGVja3MKCj1vdmVyIDQKCj1pdGVtICogTDwvSXNJUHY0QWRkcmVzcygpPgoKPWl0ZW0gKiBMPC9Jc0lQdjZBZGRyZXNzKCk+Cgo9aXRlbSAqIEw8L0lzTUQ1U3VtKCk+Cgo9YmFjawoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBJc1N0cmluZygpCgp0ZXN0IHN1cHBsaWVkIGRhdGEgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgc3RyaW5nIC0gYW4gZW1wdHkgc3RyaW5nIGlzIHZhbGlkCgpyZXR1cm5zIDEgaWYgZGF0YSBtYXRjaGVzIGNyaXRlcmlhIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRSZXN1bHQgPSBJc1N0cmluZygKICAgICAgICAnYWJjJywgIyBkYXRhIHRvIGJlIHRlc3RlZAogICAgKTsKCj1jdXQKCiMjIG5vIGNyaXRpYyAoUGVybDo6Q3JpdGljOjpQb2xpY3k6OlN1YnJvdXRpbmVzOjpSZXF1aXJlQXJnVW5wYWNraW5nKQoKc3ViIElzU3RyaW5nIHsKICAgIG15ICRUZXN0RGF0YSA9ICRfWzBdOwoKICAgIHJldHVybiBpZiBzY2FsYXIgQF8gbmUgMTsKICAgIHJldHVybiBpZiByZWYgJFRlc3REYXRhOwogICAgcmV0dXJuIGlmICFkZWZpbmVkICRUZXN0RGF0YTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIElzU3RyaW5nV2l0aERhdGEoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIG5vbiB6ZXJvLWxlbmd0aCBzdHJpbmcKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzU3RyaW5nV2l0aERhdGEoCiAgICAgICAgJ2FiYycsICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICk7Cgo9Y3V0CgpzdWIgSXNTdHJpbmdXaXRoRGF0YSB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgIUlzU3RyaW5nKEBfKTsKICAgIHJldHVybiBpZiAkVGVzdERhdGEgZXEgJyc7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBJc0FycmF5UmVmV2l0aERhdGEoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhbiBhcnJheSByZWZlcmVuY2UgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBrZXkKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzQXJyYXlSZWZXaXRoRGF0YSgKICAgICAgICBbICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICAgICAgICAgJ2tleScsCiAgICAgICAgICAgIC4uLgogICAgICAgIF0sCiAgICApOwoKPWN1dAoKc3ViIElzQXJyYXlSZWZXaXRoRGF0YSB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgc2NhbGFyIEBfIG5lIDE7CiAgICByZXR1cm4gaWYgcmVmICRUZXN0RGF0YSBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmICFAeyRUZXN0RGF0YX07CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBJc0hhc2hSZWZXaXRoRGF0YSgpCgp0ZXN0IHN1cHBsaWVkIGRhdGEgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgaGFzaCByZWZlcmVuY2UgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBrZXkvdmFsdWUgcGFpcgoKcmV0dXJucyAxIGlmIGRhdGEgbWF0Y2hlcyBjcml0ZXJpYSBvciB1bmRlZiBvdGhlcndpc2UKCiAgICBteSAkUmVzdWx0ID0gSXNIYXNoUmVmV2l0aERhdGEoCiAgICAgICAgeyAjIGRhdGEgdG8gYmUgdGVzdGVkCiAgICAgICAgICAgICdrZXknID0+ICd2YWx1ZScsCiAgICAgICAgICAgIC4uLgogICAgICAgIH0sCiAgICApOwoKPWN1dAoKc3ViIElzSGFzaFJlZldpdGhEYXRhIHsKICAgIG15ICRUZXN0RGF0YSA9ICRfWzBdOwoKICAgIHJldHVybiBpZiBzY2FsYXIgQF8gbmUgMTsKICAgIHJldHVybiBpZiByZWYgJFRlc3REYXRhIG5lICdIQVNIJzsKICAgIHJldHVybiBpZiAhJXskVGVzdERhdGF9OwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgSXNOdW1iZXIoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIG51bWJlcgooaW50ZWdlciwgZmxvYXRpbmcgcG9pbnQsIHBvc3NpYmxlIGV4cG9uZW50LCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSkKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzTnVtYmVyKAogICAgICAgIDk5OSwgIyBkYXRhIHRvIGJlIHRlc3RlZAogICAgKTsKCj1jdXQKCnN1YiBJc051bWJlciB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgIUlzU3RyaW5nV2l0aERhdGEoQF8pOwogICAgcmV0dXJuIGlmICRUZXN0RGF0YSAhfiBtewogICAgICAgIFxBIFstXT8gKD86IFxkKyB8IFxkKiBbLl0gXGQrIHwgKD86IFxkKyBbLl0/IFxkKiB8IFxkKiBbLl0gXGQrICkgW2VFXSBbLStdPyBcZCogKSBcegogICAgfXhtczsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIElzSW50ZWdlcigpCgp0ZXN0IHN1cHBsaWVkIGRhdGEgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGFuIGludGVnZXIgKG9ubHkgZGlnaXRzLCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSkKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzSW50ZWdlcigKICAgICAgICA5OTksICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICk7Cgo9Y3V0CgpzdWIgSXNJbnRlZ2VyIHsKICAgIG15ICRUZXN0RGF0YSA9ICRfWzBdOwoKICAgIHJldHVybiBpZiAhSXNTdHJpbmdXaXRoRGF0YShAXyk7CiAgICByZXR1cm4gaWYgJFRlc3REYXRhICF+IG17IFxBIFstXT8gKD86IDAgfCBbMS05XSBcZCogKSBceiB9eG1zOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgSXNQb3NpdGl2ZUludGVnZXIoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIHBvc2l0aXZlIGludGVnZXIgKG9ubHkgZGlnaXRzIGFuZCBwb3NpdGl2ZSkKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzUG9zaXRpdmVJbnRlZ2VyKAogICAgICAgIDk5OSwgIyBkYXRhIHRvIGJlIHRlc3RlZAogICAgKTsKCj1jdXQKCnN1YiBJc1Bvc2l0aXZlSW50ZWdlciB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgIUlzU3RyaW5nV2l0aERhdGEoQF8pOwogICAgcmV0dXJuIGlmICRUZXN0RGF0YSAhfiBteyBcQSBbMS05XSBcZCogXHogfXhtczsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIElzSVB2NEFkZHJlc3MoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIHZhbGlkIElQdjQgYWRkcmVzcyAoc3ludGF4IGNoZWNrIG9ubHkpCgpyZXR1cm5zIDEgaWYgZGF0YSBtYXRjaGVzIGNyaXRlcmlhIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRSZXN1bHQgPSBJc0lQdjRBZGRyZXNzKAogICAgICAgICcxOTIuMTY4LjAuMScsICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICk7Cgo9Y3V0CgpzdWIgSXNJUHY0QWRkcmVzcyB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgIUlzU3RyaW5nV2l0aERhdGEoQF8pOwogICAgcmV0dXJuIGlmICRUZXN0RGF0YSAhfiBteyBcQSBbXGRcLl0rIFx6IH14bXM7CiAgICBteSBAUGFydCA9IHNwbGl0ICdcLicsICRUZXN0RGF0YTsKCiAgICAjIGZvdXIgcGFydHMgZGVsaW1pdGVkIGJ5ICcuJyBuZWVkZWQKICAgIHJldHVybiBpZiBzY2FsYXIgQFBhcnQgbmUgNDsKICAgIGZvciBteSAkUGFydCAoQFBhcnQpIHsKCiAgICAgICAgIyBhbGxvdyBudW1iZXJzIDAgdG8gMjU1LCBubyBsZWFkaW5nIHplcm9lcwogICAgICAgIHJldHVybiBpZiAkUGFydCAhfiBtewogICAgICAgICAgICBcQSAoPzogXGQgfCBbMS05XSBcZCB8IFsxXSBcZHsyfSB8IFsyXVswLTRdXGQgfCBbMl1bNV1bMC01XSApIFx6CiAgICAgICAgfXhtczsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIElzSVB2NkFkZHJlc3MoKQoKdGVzdCBzdXBwbGllZCBkYXRhIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIHZhbGlkIElQdjYgYWRkcmVzcyAoc3ludGF4IGNoZWNrIG9ubHkpCnNob3J0aGFuZCBub3RhdGlvbiBhbmQgbWl4ZWQgSVB2Ni9JUHY0IG5vdGF0aW9uIGFsbG93ZWQKIyBGSVhNRSBJUHY2L0lQdjQgbm90YXRpb24gY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQKCnJldHVybnMgMSBpZiBkYXRhIG1hdGNoZXMgY3JpdGVyaWEgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFJlc3VsdCA9IElzSVB2NkFkZHJlc3MoCiAgICAgICAgJzAwMDA6MTExMToyMjIyOjMzMzM6NDQ0NDo1NTU1OjY2NjY6Nzc3NycsICMgZGF0YSB0byBiZSB0ZXN0ZWQKICAgICk7Cgo9Y3V0CgpzdWIgSXNJUHY2QWRkcmVzcyB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgIUlzU3RyaW5nV2l0aERhdGEoQF8pOwoKICAgICMgb25seSBoZXggY2hhcmFjdGVycyAoMC05LEEtWikgcGx1cyBzZXBhcmF0b3IgJzonIGFsbG93ZWQKICAgIHJldHVybiBpZiAkVGVzdERhdGEgIX4gbXsgXEEgW1xkYS1mOl0rIFx6IH14bXNpOwoKICAgICMgc3BlY2lhbCBjYXNlIC0gZXF1YWxzIG9ubHkgemVyb2VzCiAgICByZXR1cm4gMSBpZiAkVGVzdERhdGEgZXEgJzo6JzsKCiAgICAjIHNwZWNpYWwgY2FzZXMgLSBhZGRyZXNzIG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHNpbmdsZSAnOicKICAgIHJldHVybiBpZiAkVGVzdERhdGEgPX4gbXsgXEEgOiBbXjpdIH14bXM7CiAgICByZXR1cm4gaWYgJFRlc3REYXRhID1+IG17IFteOl0gOiBceiB9eG1zOwoKICAgICMgc3BlY2lhbCBjYXNlIC0gYWRkcmVzcyBtdXN0IG5vdCBzdGFydCBhbmQgZW5kIHdpdGggJzonCiAgICByZXR1cm4gaWYgJFRlc3REYXRhID1+IG17IFxBIDogLisgOiBceiB9eG1zOwoKICAgIG15ICRTa2lwRmlyc3Q7CiAgICBpZiAoICRUZXN0RGF0YSA9fiBteyBcQSA6OiB9eG1zICkgewogICAgICAgICRUZXN0RGF0YSAgPSAnWCcgLiAkVGVzdERhdGE7CiAgICAgICAgJFNraXBGaXJzdCA9IDE7CiAgICB9CiAgICBteSAkU2tpcExhc3Q7CiAgICBpZiAoICRUZXN0RGF0YSA9fiBteyA6OiBceiB9eG1zICkgewogICAgICAgICRUZXN0RGF0YSAuPSAnWCc7CiAgICAgICAgJFNraXBMYXN0ID0gMTsKICAgIH0KICAgIG15IEBQYXJ0ID0gc3BsaXQgJzonLCAkVGVzdERhdGE7CiAgICBpZiAoJFNraXBGaXJzdCkgewogICAgICAgIHNoaWZ0IEBQYXJ0OwogICAgfQogICAgaWYgKCRTa2lwTGFzdCkgewogICAgICAgIGRlbGV0ZSAkUGFydFstMV07CiAgICB9CiAgICByZXR1cm4gaWYgc2NhbGFyIEBQYXJ0IDwgMiB8fCBzY2FsYXIgQFBhcnQgPiA4OwogICAgcmV0dXJuIGlmIHNjYWxhciBAUGFydCBuZSA4ICYmICRUZXN0RGF0YSAhfiBteyA6OiB9eG1zOwoKICAgICMgaGFuZGxlIGZ1bGwgYWRkcmVzZXMKICAgIGlmICggc2NhbGFyIEBQYXJ0IGVxIDggKSB7CiAgICAgICAgbXkgJEVtcHR5UGFydDsKICAgICAgICBQQVJUOgogICAgICAgIGZvciBteSAkUGFydCAoQFBhcnQpIHsKICAgICAgICAgICAgaWYgKCAkUGFydCBlcSAnJyApIHsKICAgICAgICAgICAgICAgIHJldHVybiBpZiAkRW1wdHlQYXJ0OwogICAgICAgICAgICAgICAgJEVtcHR5UGFydCA9IDE7CiAgICAgICAgICAgICAgICBuZXh0IFBBUlQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGlmICRQYXJ0ICF+IG17IFxBIFtcZGEtZl17MSw0fSBceiB9eG1zaTsKICAgICAgICB9CiAgICB9CgogICAgIyBoYW5kbGUgc2hvcnRoYW5kIGFkZHJlc3NlcwogICAgbXkgJFNob3J0SGFuZFVzZWQ7CiAgICBQQVJUOgogICAgZm9yIG15ICRQYXJ0IChAUGFydCkgewogICAgICAgIG5leHQgUEFSVCBpZiAkUGFydCBlcSAnWCc7CgogICAgICAgICMgZW1wdHkgcGFydCBtZWFucyBzaG9ydGhhbmQgLSBkbyB3ZSBhbHJlYWR5IGhhdmUgbW9yZSB0aGFuIG9uZSBjb25zZWN1dGl2ZSBlbXB0eSBwYXJ0cz8KICAgICAgICByZXR1cm4gaWYgJFBhcnQgZXEgJycgJiYgJFNob3J0SGFuZFVzZWQ7CiAgICAgICAgaWYgKCAkUGFydCBlcSAnJyApIHsKICAgICAgICAgICAgJFNob3J0SGFuZFVzZWQgPSAxOwogICAgICAgICAgICBuZXh0IFBBUlQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpZiAkUGFydCAhfiBteyBcQSBbXGRhLWZdezEsNH0gXHogfXhtc2k7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBJc01ENVN1bSgpCgp0ZXN0IHN1cHBsaWVkIGRhdGEgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGFuIEM8TUQ1PiBzdW0gKDMyIGhleCBjaGFyYWN0ZXJzKQoKcmV0dXJucyAxIGlmIGRhdGEgbWF0Y2hlcyBjcml0ZXJpYSBvciB1bmRlZiBvdGhlcndpc2UKCiAgICBteSAkUmVzdWx0ID0gSXNNRDVTdW0oCiAgICAgICAgJzZmMWVkMDAyYWI1NTk1ODU5MDE0ZWJmMDk1MTUyMmQ5JywgIyBkYXRhIHRvIGJlIHRlc3RlZAogICAgKTsKCj1jdXQKCnN1YiBJc01ENVN1bSB7CiAgICBteSAkVGVzdERhdGEgPSAkX1swXTsKCiAgICByZXR1cm4gaWYgIUlzU3RyaW5nV2l0aERhdGEoQF8pOwogICAgcmV0dXJuIGlmICRUZXN0RGF0YSAhfiBteyBcQSBbXGRhLWZdezMyfSBceiB9eG1zaTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIERhdGFJc0RpZmZlcmVudCgpCgpjb21wYXJlcyB0d28gZGF0YSBzdHJ1Y3R1cmVzIHdpdGggZWFjaCBvdGhlci4gUmV0dXJucyAxIGlmCnRoZXkgYXJlIGRpZmZlcmVudCwgdW5kZWYgb3RoZXJ3aXNlLgoKRGF0YSBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZSBhbmQgY2FuIGJlIFNDQUxBUiwKQVJSQVkgb3IgSEFTSC4KCiAgICBteSAkRGF0YUlzRGlmZmVyZW50ID0gRGF0YUlzRGlmZmVyZW50KAogICAgICAgIERhdGExID0+IFwkRGF0YTEsCiAgICAgICAgRGF0YTIgPT4gXCREYXRhMiwKICAgICk7Cgo9Y3V0CgpzdWIgRGF0YUlzRGlmZmVyZW50IHsKICAgIG15ICglUGFyYW0pID0gQF87CgogICAgIyAnJwogICAgaWYgKCByZWYgJFBhcmFte0RhdGExfSBlcSAnJyAmJiByZWYgJFBhcmFte0RhdGEyfSBlcSAnJyApIHsKCiAgICAgICAgIyBkbyBub3RoaW5nLCBpdCdzIG9rCiAgICAgICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtEYXRhMX0gJiYgIWRlZmluZWQgJFBhcmFte0RhdGEyfTsKCiAgICAgICAgIyByZXR1cm4gZGlmZiwgYmVjYXVzZSBpdHMgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuIDEgaWYgIWRlZmluZWQgJFBhcmFte0RhdGExfSB8fCAhZGVmaW5lZCAkUGFyYW17RGF0YTJ9OwoKICAgICAgICAjIHJldHVybiBkaWZmLCBiZWNhdXNlIGl0cyBkaWZmZXJlbnQKICAgICAgICByZXR1cm4gMSBpZiAkUGFyYW17RGF0YTF9IG5lICRQYXJhbXtEYXRhMn07CgogICAgICAgICMgcmV0dXJuLCBiZWNhdXNlIGl0cyBub3QgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgU0NBTEFSCiAgICBpZiAoIHJlZiAkUGFyYW17RGF0YTF9IGVxICdTQ0FMQVInICYmIHJlZiAkUGFyYW17RGF0YTJ9IGVxICdTQ0FMQVInICkgewoKICAgICAgICAjIGRvIG5vdGhpbmcsIGl0J3Mgb2sKICAgICAgICByZXR1cm4gaWYgIWRlZmluZWQgJHsgJFBhcmFte0RhdGExfSB9ICYmICFkZWZpbmVkICR7ICRQYXJhbXtEYXRhMn0gfTsKCiAgICAgICAgIyByZXR1cm4gZGlmZiwgYmVjYXVzZSBpdHMgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuIDEgaWYgIWRlZmluZWQgJHsgJFBhcmFte0RhdGExfSB9IHx8ICFkZWZpbmVkICR7ICRQYXJhbXtEYXRhMn0gfTsKCiAgICAgICAgIyByZXR1cm4gZGlmZiwgYmVjYXVzZSBpdHMgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuIDEgaWYgJHsgJFBhcmFte0RhdGExfSB9IG5lICR7ICRQYXJhbXtEYXRhMn0gfTsKCiAgICAgICAgIyByZXR1cm4sIGJlY2F1c2UgaXRzIG5vdCBkaWZmZXJlbnQKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBBUlJBWQogICAgaWYgKCByZWYgJFBhcmFte0RhdGExfSBlcSAnQVJSQVknICYmIHJlZiAkUGFyYW17RGF0YTJ9IGVxICdBUlJBWScgKSB7CiAgICAgICAgbXkgQEEgPSBAeyAkUGFyYW17RGF0YTF9IH07CiAgICAgICAgbXkgQEIgPSBAeyAkUGFyYW17RGF0YTJ9IH07CgogICAgICAgICMgY2hlY2sgaWYgdGhlIGNvdW50IGlzIGRpZmZlcmVudAogICAgICAgIHJldHVybiAxIGlmICQjQSBuZSAkI0I7CgogICAgICAgICMgY29tcGFyZSBhcnJheQogICAgICAgIENPVU5UOgogICAgICAgIGZvciBteSAkQ291bnQgKCAwIC4uICQjQSApIHsKCiAgICAgICAgICAgICMgZG8gbm90aGluZywgaXQncyBvawogICAgICAgICAgICBuZXh0IENPVU5UIGlmICFkZWZpbmVkICRBWyRDb3VudF0gJiYgIWRlZmluZWQgJEJbJENvdW50XTsKCiAgICAgICAgICAgICMgcmV0dXJuIGRpZmYsIGJlY2F1c2UgaXRzIGRpZmZlcmVudAogICAgICAgICAgICByZXR1cm4gMSBpZiAhZGVmaW5lZCAkQVskQ291bnRdIHx8ICFkZWZpbmVkICRCWyRDb3VudF07CgogICAgICAgICAgICBpZiAoICRBWyRDb3VudF0gbmUgJEJbJENvdW50XSApIHsKICAgICAgICAgICAgICAgIGlmICggcmVmICRBWyRDb3VudF0gZXEgJ0FSUkFZJyB8fCByZWYgJEFbJENvdW50XSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEgaWYgRGF0YUlzRGlmZmVyZW50KAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhMSA9PiAkQVskQ291bnRdLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhMiA9PiAkQlskQ291bnRdCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBuZXh0IENPVU5UOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgSEFTSAogICAgaWYgKCByZWYgJFBhcmFte0RhdGExfSBlcSAnSEFTSCcgJiYgcmVmICRQYXJhbXtEYXRhMn0gZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVBID0gJXsgJFBhcmFte0RhdGExfSB9OwogICAgICAgIG15ICVCID0gJXsgJFBhcmFte0RhdGEyfSB9OwoKICAgICAgICAjIGNvbXBhcmUgJUEgd2l0aCAlQiBhbmQgcmVtb3ZlIGl0IGlmIGNoZWNrZWQKICAgICAgICBLRVk6CiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJUEgKSB7CgogICAgICAgICAgICAjIENoZWNrIGlmIGJvdGggYXJlIHVuZGVmaW5lZAogICAgICAgICAgICBpZiAoICFkZWZpbmVkICRBeyRLZXl9ICYmICFkZWZpbmVkICRCeyRLZXl9ICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRBeyRLZXl9OwogICAgICAgICAgICAgICAgZGVsZXRlICRCeyRLZXl9OwogICAgICAgICAgICAgICAgbmV4dCBLRVk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmV0dXJuIGRpZmYsIGJlY2F1c2UgaXRzIGRpZmZlcmVudAogICAgICAgICAgICByZXR1cm4gMSBpZiAhZGVmaW5lZCAkQXskS2V5fSB8fCAhZGVmaW5lZCAkQnskS2V5fTsKCiAgICAgICAgICAgIGlmICggJEF7JEtleX0gZXEgJEJ7JEtleX0gKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJEF7JEtleX07CiAgICAgICAgICAgICAgICBkZWxldGUgJEJ7JEtleX07CiAgICAgICAgICAgICAgICBuZXh0IEtFWTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZXR1cm4gaWYgdmFsdWVzIGFyZSBkaWZmZXJlbnQKICAgICAgICAgICAgaWYgKCByZWYgJEF7JEtleX0gZXEgJ0FSUkFZJyB8fCByZWYgJEF7JEtleX0gZXEgJ0hBU0gnICkgewogICAgICAgICAgICAgICAgcmV0dXJuIDEgaWYgRGF0YUlzRGlmZmVyZW50KAogICAgICAgICAgICAgICAgICAgIERhdGExID0+ICRBeyRLZXl9LAogICAgICAgICAgICAgICAgICAgIERhdGEyID0+ICRCeyRLZXl9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgZGVsZXRlICRBeyRLZXl9OwogICAgICAgICAgICAgICAgZGVsZXRlICRCeyRLZXl9OwogICAgICAgICAgICAgICAgbmV4dCBLRVk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHJlc3QKICAgICAgICByZXR1cm4gMSBpZiAlQjsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte0RhdGExfSBlcSAnUkVGJyAmJiByZWYgJFBhcmFte0RhdGEyfSBlcSAnUkVGJyApIHsKICAgICAgICByZXR1cm4gMSBpZiBEYXRhSXNEaWZmZXJlbnQoCiAgICAgICAgICAgIERhdGExID0+ICR7ICRQYXJhbXtEYXRhMX0gfSwKICAgICAgICAgICAgRGF0YTIgPT4gJHsgJFBhcmFte0RhdGEyfSB9CiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0CgAAAAAAAAAAbC8AAAAAAAAAAAAAAAAAAAAAAABsLwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
-				]
-			]
-		},
-		{
-			"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Modules/AdminSystemFiles.pm",
-			"settings":
-			{
-				"buffer_size": 22596,
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					18,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AQAAAJYHAAAAAAAAlwcAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWBwAAAAAAAJYHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					19,
-					1,
-					"paste",
-					null,
-					"AQAAAJcHAAAAAAAAcQgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACXBwAAAAAAAJcHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					20,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AQAAAHEIAAAAAAAAcggAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABxCAAAAAAAAHEIAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					23,
-					1,
-					"left_delete",
-					null,
-					"CAAAAGoIAAAAAAAAaggAAAAAAAACAAAAKyBeCAAAAAAAAF4IAAAAAAAAAgAAACsgJQgAAAAAAAAlCAAAAAAAAAIAAAArIPkHAAAAAAAA+QcAAAAAAAACAAAAKyDwBwAAAAAAAPAHAAAAAAAAAgAAACsgtwcAAAAAAAC3BwAAAAAAAAIAAAArIKEHAAAAAAAAoQcAAAAAAAACAAAAKyCXBwAAAAAAAJcHAAAAAAAAAgAAACsg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAgAAACZBwAAAAAAAJcHAAAAAAAAAAAAAAAA8L+jBwAAAAAAAKEHAAAAAAAAAAAAAAAA8L+5BwAAAAAAALcHAAAAAAAAAAAAAAAA8L/yBwAAAAAAAPAHAAAAAAAAAAAAAAAA8L/7BwAAAAAAAPkHAAAAAAAAAAAAAAAA8L8nCAAAAAAAACUIAAAAAAAAAAAAAAAA8L9gCAAAAAAAAF4IAAAAAAAAAAAAAAAA8L9sCAAAAAAAAGoIAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					33,
-					1,
-					"insert",
-					{
-						"characters": "\t"
-					},
-					"CAAAAF8IAAAAAAAAYAgAAAAAAAAAAAAAVQgAAAAAAABWCAAAAAAAAAAAAAAeCAAAAAAAAB8IAAAAAAAAAAAAAPQHAAAAAAAA9QcAAAAAAAAAAAAA7QcAAAAAAADuBwAAAAAAAAAAAAC2BwAAAAAAALcHAAAAAAAAAAAAAKIHAAAAAAAAowcAAAAAAAAAAAAAmgcAAAAAAACbBwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAgAAACaBwAAAAAAAJoHAAAAAAAAAAAAAAAA8L+iBwAAAAAAAKIHAAAAAAAAAAAAAAAA8L+2BwAAAAAAALYHAAAAAAAAAAAAAAAA8L/tBwAAAAAAAO0HAAAAAAAAAAAAAAAA8L/0BwAAAAAAAPQHAAAAAAAAAAAAAAAA8L8eCAAAAAAAAB4IAAAAAAAAAAAAAAAA8L9VCAAAAAAAAFUIAAAAAAAAAAAAAAAA8L9fCAAAAAAAAF8IAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					47,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AQAAAJYHAAAAAAAAlwcAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWBwAAAAAAAJYHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					48,
-					1,
-					"reindent",
-					null,
-					"AQAAAJcHAAAAAAAAmwcAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACXBwAAAAAAAJcHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					50,
-					1,
-					"paste",
-					null,
-					"AQAAAJsHAAAAAAAAxgcAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACbBwAAAAAAAJsHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					53,
-					1,
-					"insert",
-					{
-						"characters": "my"
-					},
-					"AgAAAJsHAAAAAAAAnAcAAAAAAAAAAAAAnAcAAAAAAACdBwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACbBwAAAAAAAJsHAAAAAAAAAAAAAAAAQEA"
-				],
-				[
-					54,
-					1,
-					"insert",
-					{
-						"characters": " $Is"
-					},
-					"BAAAAJ0HAAAAAAAAngcAAAAAAAAAAAAAngcAAAAAAACfBwAAAAAAAAAAAACfBwAAAAAAAKAHAAAAAAAAAAAAAKAHAAAAAAAAoQcAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACdBwAAAAAAAJ0HAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					55,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAKEHAAAAAAAAogcAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAChBwAAAAAAAKEHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					69,
-					1,
-					"paste",
-					null,
-					"AgAAAJ8HAAAAAAAAqwcAAAAAAAAAAAAAqwcAAAAAAACrBwAAAAAAAAIAAABJcw",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACfBwAAAAAAAKEHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					73,
-					1,
-					"left_delete",
-					null,
-					"AQAAAJ8HAAAAAAAAnwcAAAAAAAABAAAAXw",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACgBwAAAAAAAKAHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					76,
-					1,
-					"insert",
-					{
-						"characters": " ="
-					},
-					"AgAAAKoHAAAAAAAAqwcAAAAAAAAAAAAAqwcAAAAAAACsBwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACqBwAAAAAAAKoHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					87,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"BgAAANcHAAAAAAAA2AcAAAAAAAAAAAAA2AcAAAAAAADcBwAAAAAAAAAAAADCBwAAAAAAAMMHAAAAAAAAAAAAAMMHAAAAAAAAxwcAAAAAAAAAAAAAwwcAAAAAAADDBwAAAAAAAAQAAAAgICAgwwcAAAAAAADLBwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAIAAADCBwAAAAAAAMIHAAAAAAAAAAAAAAAA8L/XBwAAAAAAANcHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					96,
-					1,
-					"insert",
-					{
-						"characters": ";"
-					},
-					"AwAAAOYHAAAAAAAA5wcAAAAAAAAAAAAA4QcAAAAAAADhBwAAAAAAAAQAAAAgICAg4QcAAAAAAADpBwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADmBwAAAAAAAOYHAAAAAAAAAAAAAAAAbUA"
-				],
-				[
-					98,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"BAAAAOsHAAAAAAAA7AcAAAAAAAAAAAAA7AcAAAAAAAD0BwAAAAAAAAAAAADsBwAAAAAAAOwHAAAAAAAACAAAACAgICAgICAg7AcAAAAAAADwBwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADrBwAAAAAAAOsHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					101,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AwAAAOwHAAAAAAAA7AcAAAAAAAAEAAAAICAgIN8HAAAAAAAA3wcAAAAAAAABAAAAIMEHAAAAAAAAwQcAAAAAAAABAAAAIA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADwBwAAAAAAAPAHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					108,
-					1,
-					"unindent",
-					null,
-					"AQAAAN8HAAAAAAAA3wcAAAAAAAAEAAAAICAgIA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADnBwAAAAAAAOcHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					123,
-					1,
-					"paste",
-					null,
-					"AgAAABIIAAAAAAAAHQgAAAAAAAAAAAAAHQgAAAAAAAAdCAAAAAAAACoAAABTZWxmLT5fSXNabnVueUZpbGUoIEZpbGUgPT4gJFBhcmFte0ZpbGV9ICk",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAASCAAAAAAAADwIAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					133,
-					1,
-					"left_delete",
-					null,
-					"AQAAAAUIAAAAAAAABQgAAAAAAAAIAAAAICAgICAgICA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAANCAAAAAAAAAUIAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					135,
-					1,
-					"left_delete",
-					null,
-					"AQAAAAQIAAAAAAAABAgAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAFCAAAAAAAAAUIAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					138,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAAQIAAAAAAAABQgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAECAAAAAAAAAQIAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					142,
-					1,
-					"left_delete",
-					null,
-					"AQAAAPAHAAAAAAAA8AcAAAAAAAAIAAAAICAgICAgICA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD4BwAAAAAAAPAHAAAAAAAAAAAAAAAAAAA"
-				],
-				[
-					144,
-					1,
-					"left_delete",
-					null,
-					"AQAAAO8HAAAAAAAA7wcAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADwBwAAAAAAAPAHAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					147,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAO8HAAAAAAAA8AcAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADvBwAAAAAAAO8HAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					151,
-					2,
-					"left_delete",
-					null,
-					"AgAAAA4IAAAAAAAADggAAAAAAAAEAAAAICAgIA0IAAAAAAAADQgAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAASCAAAAAAAABIIAAAAAAAAAAAAAAAAQEA"
-				],
-				[
-					152,
-					1,
-					"insert",
-					{
-						"characters": " "
-					},
-					"AQAAAA0IAAAAAAAADggAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAANCAAAAAAAAA0IAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					159,
-					1,
-					"cut",
-					null,
-					"AQAAAIYIAAAAAAAAhggAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACGCAAAAAAAAIYIAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					177,
-					1,
-					"reindent",
-					null,
-					"AQAAAK5LAAAAAAAAsksAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACuSwAAAAAAAK5LAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					180,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AwAAALJLAAAAAAAAs0sAAAAAAAAAAAAAs0sAAAAAAAC3SwAAAAAAAAAAAACuSwAAAAAAAK5LAAAAAAAABAAAACAgICA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACySwAAAAAAALJLAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					182,
-					1,
-					"paste",
-					null,
-					"AQAAALNLAAAAAAAAzksAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACzSwAAAAAAALNLAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					183,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAM5LAAAAAAAAz0sAAAAAAAAAAAAAz0sAAAAAAADTSwAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADOSwAAAAAAAM5LAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					184,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAAM9LAAAAAAAAz0sAAAAAAAAEAAAAICAgIA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADTSwAAAAAAANNLAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					193,
-					1,
-					"insert",
-					{
-						"characters": "\n\n"
-					},
-					"AgAAAFBZAAAAAAAAUVkAAAAAAAAAAAAAUVkAAAAAAABSWQAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABQWQAAAAAAAFBZAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					194,
-					1,
-					"paste",
-					null,
-					"AQAAAFJZAAAAAAAAploAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABSWQAAAAAAAFJZAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					196,
-					1,
-					"left_delete",
-					null,
-					"DgAAAKNaAAAAAAAAo1oAAAAAAAABAAAAK5RaAAAAAAAAlFoAAAAAAAABAAAAK5JaAAAAAAAAkloAAAAAAAABAAAAK15aAAAAAAAAXloAAAAAAAABAAAAKzJaAAAAAAAAMloAAAAAAAABAAAAKzBaAAAAAAAAMFoAAAAAAAABAAAAK/pZAAAAAAAA+lkAAAAAAAABAAAAK/hZAAAAAAAA+FkAAAAAAAABAAAAK8ZZAAAAAAAAxlkAAAAAAAABAAAAK8RZAAAAAAAAxFkAAAAAAAABAAAAK4hZAAAAAAAAiFkAAAAAAAABAAAAK4ZZAAAAAAAAhlkAAAAAAAABAAAAK2ZZAAAAAAAAZlkAAAAAAAABAAAAK1JZAAAAAAAAUlkAAAAAAAABAAAAKw",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAA4AAABTWQAAAAAAAFJZAAAAAAAAAAAAAAAA8L9nWQAAAAAAAGZZAAAAAAAAAAAAAAAA8L+HWQAAAAAAAIZZAAAAAAAAAAAAAAAA8L+JWQAAAAAAAIhZAAAAAAAAAAAAAAAA8L/FWQAAAAAAAMRZAAAAAAAAAAAAAAAA8L/HWQAAAAAAAMZZAAAAAAAAAAAAAAAA8L/5WQAAAAAAAPhZAAAAAAAAAAAAAAAA8L/7WQAAAAAAAPpZAAAAAAAAAAAAAAAA8L8xWgAAAAAAADBaAAAAAAAAAAAAAAAA8L8zWgAAAAAAADJaAAAAAAAAAAAAAAAA8L9fWgAAAAAAAF5aAAAAAAAAAAAAAAAA8L+TWgAAAAAAAJJaAAAAAAAAAAAAAAAA8L+VWgAAAAAAAJRaAAAAAAAAAAAAAAAA8L+kWgAAAAAAAKNaAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					223,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AQAAAHoBAAAAAAAAewEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB6AQAAAAAAAHoBAAAAAAAA////////738"
-				],
-				[
-					225,
-					1,
-					"paste",
-					null,
-					"AQAAAHsBAAAAAAAAugEAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB7AQAAAAAAAHsBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					230,
-					1,
-					"left_delete",
-					null,
-					"AwAAAKUBAAAAAAAApQEAAAAAAAABAAAAK6MBAAAAAAAAowEAAAAAAAABAAAAK3sBAAAAAAAAewEAAAAAAAABAAAAKw",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAMAAAB8AQAAAAAAAHsBAAAAAAAAAAAAAAAA8L+kAQAAAAAAAKMBAAAAAAAAAAAAAAAA8L+mAQAAAAAAAKUBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					238,
-					1,
-					"cut",
-					null,
-					"AQAAALcBAAAAAAAAtwEAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC3AQAAAAAAALcBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					243,
-					1,
-					"cut",
-					null,
-					"AQAAAKIBAAAAAAAAogEAAAAAAAABAAAACg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACiAQAAAAAAAKIBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					250,
-					4,
-					"swap_line_down",
-					null,
-					"CAAAANUBAAAAAAAA6QEAAAAAAAAAAAAAogEAAAAAAACiAQAAAAAAABQAAAB1c2UgQ3dkICdhYnNfcGF0aCc7CgECAAAAAAAAFQIAAAAAAAAAAAAAwQEAAAAAAADBAQAAAAAAABQAAAB1c2UgQ3dkICdhYnNfcGF0aCc7ChECAAAAAAAAJQIAAAAAAAAAAAAA7QEAAAAAAADtAQAAAAAAABQAAAB1c2UgQ3dkICdhYnNfcGF0aCc7ChICAAAAAAAAJgIAAAAAAAAAAAAA/QEAAAAAAAD9AQAAAAAAABQAAAB1c2UgQ3dkICdhYnNfcGF0aCc7Cg",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACiAQAAAAAAAKIBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					254,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AQAAABECAAAAAAAAEgIAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAARAgAAAAAAABECAAAAAAAA////////738"
-				],
-				[
-					271,
-					1,
-					"insert",
-					{
-						"characters": "\n"
-					},
-					"AgAAAI9aAAAAAAAAkFoAAAAAAAAAAAAAkFoAAAAAAACUWgAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACPWgAAAAAAAI9aAAAAAAAA////////738"
-				],
-				[
-					273,
-					1,
-					"trim_trailing_white_space",
-					null,
-					"AQAAAJBaAAAAAAAAkFoAAAAAAAAEAAAAICAgIA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACUWgAAAAAAAJRaAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					292,
-					1,
-					"revert",
-					null,
-					"AgAAAAAAAAAAAAAAAAAAAAAAAADaWgAAIyAtLQojIENvcHlyaWdodCAoQykgMjAyMSBabnVueSBHbWJILCBodHRwczovL3pudW55Lm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pblN5c3RlbUZpbGVzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpXZWJVc2VyQWdlbnQ7CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBUZXh0OjpEaWZmOjpGb3JtYXR0ZWRIVE1MOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBGaWxlOjpzdGF0OwoKdXNlIEN3ZCAnYWJzX3BhdGgnOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpQYWNrYWdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3VwcG9ydEJ1bmRsZUdlbmVyYXRvcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpbWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnQWRtaW5TeXN0ZW1GaWxlcyc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQ7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ2FjaGVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICBteSAkVGltZU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKCiAgICBteSBAUGFyYW1OYW1lcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW1OYW1lcygpOwoKICAgIGZvciBteSAkVmFsdWUgKEBQYXJhbU5hbWVzKSB7CiAgICAgICAgJFBhcmFteyRWYWx1ZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkVmFsdWUgKSB8fCAnJzsKICAgIH0KCiAgICAkUGFyYW17Q2FjaGVEYXRlfSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0NhY2hlRGF0ZScsCiAgICApOwoKICAgIGlmICggISRQYXJhbXtDYWNoZURhdGV9ICkgewogICAgICAgICRQYXJhbXtDYWNoZURhdGV9ID0gJFRpbWVPYmplY3QtPkN1cnJlbnRUaW1lc3RhbXAoKTsKICAgICAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0NhY2hlRGF0ZScsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtDYWNoZURhdGV9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJElzWm51bnlGaWxlID0gJFNlbGYtPl9Jc1pudW55RmlsZSgKICAgICAgICBGaWxlID0+ICRQYXJhbXtGaWxlfQogICAgKTsKCiAgICBpZiAoICRQYXJhbXtGaWxlfSAmJiAhJElzWm51bnlGaWxlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0ZpbGUgbm90IGZvdW5kLicpLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0ZpbGV9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTaWRlYmFyJywKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWx0ZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbQogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QWRkSlNPbkRvY3VtZW50Q29tcGxldGVJZk5vdEV4aXN0cygKICAgICAgICBLZXkgID0+ICdBZG1pblN5c3RlbUZpbGVzLkluaXRUYWJsZUZpbHRlcicsCiAgICAgICAgQ29kZSA9PiAnCiAgICAgICAgICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQoIiNGaWx0ZXJGaWxlcyIpLCAkKCIuRmlsZXMiKSwyLDEpOwogICAgICAgICAgICAkKCIjRmlsdGVyRmlsZXMiKS5mb2N1cygpOwogICAgICAgICcsCiAgICApOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDYWNoZURlbGV0ZScgKSB7CgogICAgICAgICMgZGVsZXRlIGNhY2hlCiAgICAgICAgJENhY2hlT2JqZWN0LT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IgogICAgICAgICk7CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU3lzdGVtRmlsZXMnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9CiAgICApOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdWaWV3RmlsZScgKSB7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X1ZpZXdGaWxlKCVQYXJhbSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fU2hvd092ZXJ2aWV3KCk7CiAgICB9CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9TaG93T3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRPdXRwdXQ7CiAgICBteSBARmlsZXMgPSAkU2VsZi0+R2V0RmlsZXMoKTsKCiAgICBmb3IgbXkgJFdpZGdldCAocXcoQ3VzdG9tIENoYW5nZWQgUGFja2FnZSkpIHsKICAgICAgICBteSBARmlsZXMgPSBncmVwIHsgJFdpZGdldCBlcSAkXy0+e1R5cGV9IH0gQEZpbGVzOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fU2hvd0ZpbGVzV2lkZ2V0KAogICAgICAgICAgICBGaWxlcyAgPT4gXEBGaWxlcywKICAgICAgICAgICAgV2lkZ2V0ID0+ICRXaWRnZXQsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9WaWV3RmlsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkTG9nT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJE1haW5PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgTkVFREVEOgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpbGUpKSB7CgogICAgICAgIG5leHQgTkVFREVEIGlmIGRlZmluZWQgJFBhcmFteyROZWVkZWR9OwogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlBhcmFtZXRlciAnJE5lZWRlZCcgaXMgbmVlZGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFNlbGYtPlBhY2thZ2VGaWxlcyggQ2FjaGUgPT4gMCApOwoKICAgIG15ICRDb250ZW50ID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgIExvY2F0aW9uID0+ICRQYXJhbXtGaWxlfSwKICAgICk7CgogICAgbXkgJUZpbGVEZXRhaWxzID0gJFNlbGYtPkZpbGVEZXRhaWxzKAogICAgICAgIEZpbGUgICAgID0+ICRQYXJhbXtGaWxlfSwKICAgICAgICBUeXBlICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgRXh0ZW5kZWQgPT4gMSwKICAgICk7CgogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKHF3KE5hbWUgUGF0aCBGdWxsUGF0aCBVc2VyIEdyb3VwIENyZWF0ZWQgQ2hhbmdlZCAgKSkgewogICAgICAgIG5leHQgS0VZIGlmICEkRmlsZURldGFpbHN7JEtleX07CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWxlRGV0YWlscycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWxlRGV0YWlsc3skS2V5fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKHF3KFR5cGUgUGFja2FnZSBTdGF0ZSBTdGF0ZU1lc3NhZ2UgUGVybWlzc2lvbnMgTUQ1IE9yaWdpbmFsTUQ1KSkgewogICAgICAgIG5leHQgS0VZIGlmICEkRmlsZURldGFpbHN7JEtleX07CiAgICAgICAgaWYgKCAkS2V5IGVxICdUeXBlJyApIHsKICAgICAgICAgICAgJEZpbGVEZXRhaWxzeyRLZXl9ID0gJFNlbGYtPntGaWxlc30tPnsgJEZpbGVEZXRhaWxze0Z1bGxQYXRofSB9LT57VHlwZX0gfHwgJEZpbGVEZXRhaWxzeyRLZXl9OwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRmlsZURldGFpbHNFeHRlbmRlZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWxlRGV0YWlsc3skS2V5fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJEZpbGVEZXRhaWxze0RpZmZ9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWxlRGlmZicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRmlsZSAgICA9PiAkRmlsZURldGFpbHN7TmFtZX0sCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRGaWxlRGV0YWlsc3tEaWZmfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblN5c3RlbUZpbGVzL0ZpbGUnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIEZpbGUgICAgPT4gJEZpbGVEZXRhaWxze05hbWV9LAogICAgICAgICAgICBDb250ZW50ID0+ICRDb250ZW50ID8gJHskQ29udGVudH0gOiAnJywKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9TaG93RmlsZXNXaWRnZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExhbmd1YWdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpOwoKICAgIG15IEBGaWxlcyA9IEB7ICRQYXJhbXtGaWxlc30gfTsKCiAgICBpZiAoICRQYXJhbXtXaWRnZXR9IGVxICdQYWNrYWdlJyApIHsKCiAgICAgICAgIyBmb3IgZWFjaCBwYWNrYWdlIGdlbmVyYXRlIG93biB3aWRnZXQKICAgICAgICBteSAlUGFja2FnZXMgPSBtYXAgeyAkXy0+e1BhY2thZ2V9ID0+IDEgfSBARmlsZXM7CgogICAgICAgIGZvciBteSAkUGFja2FnZSAoIHNvcnQga2V5cyAlUGFja2FnZXMgKSB7CiAgICAgICAgICAgIG15IEBGaWxlcyA9IGdyZXAgeyAkUGFja2FnZSBlcSAkXy0+e1BhY2thZ2V9IH0gQEZpbGVzOwoKICAgICAgICAgICAgbXkgJFRyYW5zbGF0ZWRXaWRnZXROYW1lID0gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoICdQYWNrYWdlIGZpbGVzIC0gJXMnLCAkUGFja2FnZSApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdXaWRnZXQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICRUcmFuc2xhdGVkV2lkZ2V0TmFtZSwKICAgICAgICAgICAgICAgICAgICBXaWRnZXQgPT4gJFBhcmFte1dpZGdldH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRGaWxlIChARmlsZXMpIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZpbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgPT4gJFBhcmFte1dpZGdldH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbGV9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgbXkgJEhpbnQ7CiAgICAgICAgaWYgKCAkUGFyYW17V2lkZ2V0fSBlcSAnQ2hhbmdlZCcgKSB7CiAgICAgICAgICAgICRIaW50ID0gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnKEZpbGVzIHdoZXJlIG9ubHkgdGhlIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBjaGFuZ2VkIHdpbGwgbm90IGJlIGRpc3BsYXllZC4pJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnV2lkZ2V0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gJFBhcmFte1dpZGdldH0gLiAnIGZpbGVzJywKICAgICAgICAgICAgICAgIEhpbnQgICA9PiAkSGludCwKICAgICAgICAgICAgICAgIFdpZGdldCA9PiAkUGFyYW17V2lkZ2V0fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJEZpbGUgKEBGaWxlcykgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkU2VsZi0+e0ZpbGVzfS0+eyAkRmlsZS0+e0Z1bGxQYXRofSB9LT57UGFja2FnZX0KICAgICAgICAgICAgICAgICYmICRTZWxmLT57RmlsZXN9LT57ICRGaWxlLT57RnVsbFBhdGh9IH0tPntTdGF0ZX0gbmUgJ09LJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRmlsZS0+e1R5cGV9ID0gJ1BhY2thZ2UnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZpbGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgV2lkZ2V0ID0+ICRQYXJhbXtXaWRnZXR9LAogICAgICAgICAgICAgICAgICAgICV7JEZpbGV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU3lzdGVtRmlsZXMvV2lkZ2V0JywKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCj1oZWFkMiBHZXRGaWxlcygpCgpyZXR1cm5zIGFsbCBjdXN0b20sIHBhY2thZ2UgYW5kIGNoYW5nZWQgZmlsZXMuCgogICAgbXkgQEZpbGVzID0gJE9iamVjdC0+R2V0RmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQEZpbGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgJ1N0YXRlTWVzc2FnZScgPT4gJ09LJywKICAgICAgICAgICAgJ1BhdGgnICAgICAgICAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML0N1c3RvbS54bWwnLAogICAgICAgICAgICAnVHlwZScgICAgICAgICA9PiAnUGFja2FnZScsCiAgICAgICAgICAgICdHcm91cCcgICAgICAgID0+ICd3d3ctZGF0YScsCiAgICAgICAgICAgICdVc2VyJyAgICAgICAgID0+ICdzdGFmZicsCiAgICAgICAgICAgICdOYW1lJyAgICAgICAgID0+ICdDdXN0b20ueG1sJywKICAgICAgICAgICAgJ1Blcm1pc3Npb25zJyAgPT4gJzA2NjAnLAogICAgICAgICAgICAnU3RhdGUnICAgICAgICA9PiAnT0snLAogICAgICAgICAgICAnUGFja2FnZScgICAgICA9PiAnQ3VzdG9tJywKICAgICAgICAgICAgJ0Z1bGxQYXRoJyAgICAgPT4gJy93b3Jrc3BhY2Uvem51bnkvem51bnlfNzBOZXcvS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvQ3VzdG9tLnhtbCcsCiAgICAgICAgICAgICdDcmVhdGVkJyAgICAgID0+ICcyMDE5LTEwLTI4IDA5OjM2OjAzJywKICAgICAgICAgICAgJ0NoYW5nZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdTdGF0ZU1lc3NhZ2UnID0+ICdPSycsCiAgICAgICAgICAgICdQYXRoJyAgICAgICAgID0+ICdDdXN0b20vS2VybmVsL1N5c3RlbS9UaWNrZXQucG0nLAogICAgICAgICAgICAnVHlwZScgICAgICAgICA9PiAnQ3VzdG9tJywKICAgICAgICAgICAgJ0dyb3VwJyAgICAgICAgPT4gJ3d3dy1kYXRhJywKICAgICAgICAgICAgJ1VzZXInICAgICAgICAgPT4gJ3N0YWZmJywKICAgICAgICAgICAgJ05hbWUnICAgICAgICAgPT4gJ1RpY2tldC5wbScsCiAgICAgICAgICAgICdQZXJtaXNzaW9ucycgID0+ICcwNjYwJywKICAgICAgICAgICAgJ1N0YXRlJyAgICAgICAgPT4gJ09LJywKICAgICAgICAgICAgJ0Z1bGxQYXRoJyAgICAgPT4gJy93b3Jrc3BhY2Uvem51bnkvem51bnlfNzBOZXcvQ3VzdG9tL0tlcm5lbC9TeXN0ZW0vVGlja2V0LnBtJywKICAgICAgICAgICAgJ0NyZWF0ZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnLAogICAgICAgICAgICAnQ2hhbmdlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycKICAgICAgICB9LAogICAgICAgIC4uLgogICAgKTsKCj1jdXQKCnN1YiBHZXRGaWxlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBGaWxlczsKICAgIHB1c2ggQEZpbGVzLCAkU2VsZi0+UGFja2FnZUZpbGVzKCk7CiAgICBwdXNoIEBGaWxlcywgJFNlbGYtPkN1c3RvbUZpbGVzKCk7CiAgICBwdXNoIEBGaWxlcywgJFNlbGYtPkNoYW5nZWRGaWxlcygpOwoKICAgIHJldHVybiBARmlsZXM7Cn0KCj1oZWFkMiBQYWNrYWdlRmlsZXMoKQoKcmV0dXJucyBhbGwgcGFja2FnZSBmaWxlcy4KCiAgICBteSBAUGFja2FnZUZpbGVzID0gJE9iamVjdC0+UGFja2FnZUZpbGVzKCk7CgpSZXR1cm5zOgoKICAgIG15IEBQYWNrYWdlRmlsZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICAnU3RhdGVNZXNzYWdlJyA9PiAnT0snLAogICAgICAgICAgICAnUGF0aCcgICAgICAgICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvQ3VzdG9tLnhtbCcsCiAgICAgICAgICAgICdUeXBlJyAgICAgICAgID0+ICdQYWNrYWdlJywKICAgICAgICAgICAgJ0dyb3VwJyAgICAgICAgPT4gJ3d3dy1kYXRhJywKICAgICAgICAgICAgJ1VzZXInICAgICAgICAgPT4gJ3N0YWZmJywKICAgICAgICAgICAgJ05hbWUnICAgICAgICAgPT4gJ0N1c3RvbS54bWwnLAogICAgICAgICAgICAnUGVybWlzc2lvbnMnICA9PiAnMDY2MCcsCiAgICAgICAgICAgICdTdGF0ZScgICAgICAgID0+ICdPSycsCiAgICAgICAgICAgICdQYWNrYWdlJyAgICAgID0+ICdDdXN0b20nLAogICAgICAgICAgICAnRnVsbFBhdGgnICAgICA9PiAnL3dvcmtzcGFjZS96bnVueS96bnVueV83ME5ldy9LZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9DdXN0b20ueG1sJywKICAgICAgICAgICAgJ0NyZWF0ZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnLAogICAgICAgICAgICAnQ2hhbmdlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycKICAgICAgICB9LAogICAgICAgIC4uLgogICAgKTsKCj1jdXQKCnN1YiBQYWNrYWdlRmlsZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFja2FnZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQYWNrYWdlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkQ2FjaGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRDYWNoZUtleSA9ICdQYWNrYWdlRmlsZXMnOwogICAgbXkgJENhY2hlICAgID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgICRQYXJhbXtDYWNoZX0gLy89IDE7CiAgICByZXR1cm4gQHskQ2FjaGV9IGlmIElzQXJyYXlSZWZXaXRoRGF0YSgkQ2FjaGUpICYmICRQYXJhbXtDYWNoZX07CgogICAgbXkgJEhvbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKTsKCiAgICBteSBAUmVwb3NpdG9yeUxpc3QgPSAkUGFja2FnZU9iamVjdC0+UmVwb3NpdG9yeUxpc3QoCiAgICAgICAgUmVzdWx0ID0+ICdzaG9ydCcsCiAgICApOwoKICAgIG15IEBQYWNrYWdlRmlsZXM7CiAgICBmb3IgbXkgJFJlcG9zaXRvcnkgKEBSZXBvc2l0b3J5TGlzdCkgewoKICAgICAgICAjIGRlcGxveSBjaGVjawogICAgICAgIG15ICREZXBsb3llZCA9ICRQYWNrYWdlT2JqZWN0LT5EZXBsb3lDaGVjaygKICAgICAgICAgICAgJXskUmVwb3NpdG9yeX0sCiAgICAgICAgICAgIExvZyA9PiAwLAogICAgICAgICk7CiAgICAgICAgbXkgJURlcGxveUluZm8gPSAkUGFja2FnZU9iamVjdC0+RGVwbG95Q2hlY2tJbmZvKCk7CgogICAgICAgIG15ICRQYWNrYWdlRmlsZSA9ICRQYWNrYWdlT2JqZWN0LT5QYWNrYWdlRmlsZUdldE1ENVN1bSgKICAgICAgICAgICAgJXskUmVwb3NpdG9yeX0sCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRGaWxlICggc29ydCBrZXlzICV7JFBhY2thZ2VGaWxlfSApIHsKICAgICAgICAgICAgJEZpbGUgPX4gc3tcL1wvfXsvfXNteGc7CiAgICAgICAgICAgIG15ICRSZWxhdGl2UGF0aCA9ICRGaWxlOwogICAgICAgICAgICAkUmVsYXRpdlBhdGggPX4gc3skSG9tZVwvfXt9c214ZzsKCiAgICAgICAgICAgIG15ICVGaWxlRGV0YWlscyA9ICRTZWxmLT5GaWxlRGV0YWlscygKICAgICAgICAgICAgICAgIEZpbGUgPT4gJEZpbGUsCiAgICAgICAgICAgICAgICBUeXBlID0+ICdQYWNrYWdlJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRGaWxlRGV0YWlsc3tQYWNrYWdlfSAgICAgID0gJFJlcG9zaXRvcnktPntOYW1lfTsKICAgICAgICAgICAgJEZpbGVEZXRhaWxze1N0YXRlfSAgICAgICAgPSAnT0snOwogICAgICAgICAgICAkRmlsZURldGFpbHN7U3RhdGVNZXNzYWdlfSA9ICdPSyc7CiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICREZXBsb3lJbmZve0ZpbGV9ICkgJiYgJERlcGxveUluZm97RmlsZX0tPnskUmVsYXRpdlBhdGh9ICkgewogICAgICAgICAgICAgICAgJEZpbGVEZXRhaWxze1N0YXRlfSAgICAgICAgPSAnUHJvYmxlbSc7CiAgICAgICAgICAgICAgICAkRmlsZURldGFpbHN7U3RhdGVNZXNzYWdlfSA9ICdGaWxlIGlzIGRpZmZlcmVudCEnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfSA9IFwlRmlsZURldGFpbHM7CgogICAgICAgICAgICBwdXNoIEBQYWNrYWdlRmlsZXMsIHsKICAgICAgICAgICAgICAgICVGaWxlRGV0YWlscywKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQFBhY2thZ2VGaWxlcywKICAgICk7CgogICAgcmV0dXJuIEBQYWNrYWdlRmlsZXM7Cn0KCj1oZWFkMiBDdXN0b21GaWxlcygpCgpyZXR1cm5zIGFsbCBjdXN0b20gZmlsZXMuCgogICAgbXkgQEN1c3RvbUZpbGVzID0gJE9iamVjdC0+Q3VzdG9tRmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQEN1c3RvbUZpbGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgJ1N0YXRlTWVzc2FnZScgPT4gJ09LJywKICAgICAgICAgICAgJ1BhdGgnICAgICAgICAgPT4gJ0N1c3RvbS9LZXJuZWwvU3lzdGVtL1RpY2tldC5wbScsCiAgICAgICAgICAgICdUeXBlJyAgICAgICAgID0+ICdDdXN0b20nLAogICAgICAgICAgICAnR3JvdXAnICAgICAgICA9PiAnd3d3LWRhdGEnLAogICAgICAgICAgICAnVXNlcicgICAgICAgICA9PiAnc3RhZmYnLAogICAgICAgICAgICAnTmFtZScgICAgICAgICA9PiAnVGlja2V0LnBtJywKICAgICAgICAgICAgJ1Blcm1pc3Npb25zJyAgPT4gJzA2NjAnLAogICAgICAgICAgICAnU3RhdGUnICAgICAgICA9PiAnT0snLAogICAgICAgICAgICAnRnVsbFBhdGgnICAgICA9PiAnL3dvcmtzcGFjZS96bnVueS96bnVueV83ME5ldy9DdXN0b20vS2VybmVsL1N5c3RlbS9UaWNrZXQucG0nLAogICAgICAgICAgICAnQ3JlYXRlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycsCiAgICAgICAgICAgICdDaGFuZ2VkJyAgICAgID0+ICcyMDE5LTEwLTI4IDA5OjM2OjAzJwogICAgICAgIH0sCiAgICAgICAgLi4uCiAgICApOwoKPWN1dAoKc3ViIEN1c3RvbUZpbGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE1haW5PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRUaW1lT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwogICAgbXkgJENhY2hlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRDYWNoZUtleSA9ICdDdXN0b21GaWxlcyc7CiAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgcmV0dXJuIEB7JENhY2hlfSBpZiBJc0FycmF5UmVmV2l0aERhdGEoJENhY2hlKTsKCiAgICBteSAkSG9tZSA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpOwoKICAgIG15IEBGaWxlcyA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkSG9tZSAuICcvQ3VzdG9tLycsCiAgICAgICAgRmlsdGVyICAgID0+ICcqLionLAogICAgICAgIFJlY3Vyc2l2ZSA9PiAxLAogICAgKTsKCiAgICBteSBAQ3VzdG9tRmlsZXM7CiAgICBmb3IgbXkgJEZpbGUgKEBGaWxlcykgewogICAgICAgICRGaWxlID1+IHN7XC9cL317L31zbXhnOwogICAgICAgIG15ICVGaWxlRGV0YWlscyA9ICRTZWxmLT5GaWxlRGV0YWlscygKICAgICAgICAgICAgRmlsZSA9PiAkRmlsZSwKICAgICAgICAgICAgVHlwZSA9PiAnQ3VzdG9tJywKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfSA9IFwlRmlsZURldGFpbHM7CgogICAgICAgIHB1c2ggQEN1c3RvbUZpbGVzLCBcJUZpbGVEZXRhaWxzOwogICAgfQoKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBDdXN0b21GaWxlcywKICAgICk7CgogICAgcmV0dXJuIEBDdXN0b21GaWxlczsKfQoKPWhlYWQyIENoYW5nZWRGaWxlcygpCgpyZXR1cm5zIGFsbCBjaGFuZ2VkIGZpbGVzLgoKICAgIG15IEBDaGFuZ2VkRmlsZXMgPSAkT2JqZWN0LT5DaGFuZ2VkRmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQENoYW5nZWRGaWxlcyA9ICgKICAgICAgICB7CiAgICAgICAgICAgICdTdGF0ZU1lc3NhZ2UnID0+ICdPSycsCiAgICAgICAgICAgICdQYXRoJyAgICAgICAgID0+ICdLZXJuZWwvQ29uZmlnLnBtJywKICAgICAgICAgICAgJ1R5cGUnICAgICAgICAgPT4gJ0NoYW5nZWQnLAogICAgICAgICAgICAnR3JvdXAnICAgICAgICA9PiAnd3d3LWRhdGEnLAogICAgICAgICAgICAnVXNlcicgICAgICAgICA9PiAnc3RhZmYnLAogICAgICAgICAgICAnTmFtZScgICAgICAgICA9PiAnVGlja2V0LnBtJywKICAgICAgICAgICAgJ1Blcm1pc3Npb25zJyAgPT4gJzA2NjAnLAogICAgICAgICAgICAnU3RhdGUnICAgICAgICA9PiAnT0snLAogICAgICAgICAgICAnRnVsbFBhdGgnICAgICA9PiAnL3dvcmtzcGFjZS96bnVueS96bnVueV83ME5ldy9LZXJuZWwvQ29uZmlnLnBtJywKICAgICAgICAgICAgJ0NyZWF0ZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnLAogICAgICAgICAgICAnQ2hhbmdlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycKICAgICAgICB9LAogICAgICAgIC4uLgogICAgKTsKCj1jdXQKCnN1YiBDaGFuZ2VkRmlsZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTWFpbk9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENhY2hlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRDYWNoZUtleSA9ICdDaGFuZ2VkRmlsZXMnOwogICAgbXkgJENhY2hlICAgID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuIEB7JENhY2hlfSBpZiBJc0FycmF5UmVmV2l0aERhdGEoJENhY2hlKTsKCiAgICBteSAkU3VwcG9ydEJ1bmRsZUdlbmVyYXRvck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdXBwb3J0QnVuZGxlR2VuZXJhdG9yJyk7CgogICAgbXkgQENoYW5nZWRGaWxlczsKCiAgICBteSAkSG9tZSA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpOwoKICAgICRTdXBwb3J0QnVuZGxlR2VuZXJhdG9yT2JqZWN0LT57TUQ1U3VtTG9va3VwfSA9ICRTdXBwb3J0QnVuZGxlR2VuZXJhdG9yT2JqZWN0LT5fR2V0TUQ1U3VtTG9va3VwKCk7CiAgICBteSBATGlzdCA9ICRTdXBwb3J0QnVuZGxlR2VuZXJhdG9yT2JqZWN0LT5fR2V0Q3VzdG9tRmlsZUxpc3QoIERpcmVjdG9yeSA9PiAkSG9tZSApOwoKICAgIENIQU5HRURGSUxFOgogICAgZm9yIG15ICRGaWxlIChATGlzdCkgewogICAgICAgIG5leHQgQ0hBTkdFREZJTEUgaWYgJFNlbGYtPntGaWxlc30tPnskRmlsZX0gJiYgJFNlbGYtPntGaWxlc30tPnskRmlsZX0tPntUeXBlfSBlcSAnUGFja2FnZSc7CiAgICAgICAgbmV4dCBDSEFOR0VERklMRSBpZiAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfSAmJiAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfS0+e1R5cGV9IGVxICdDdXN0b20nOwoKICAgICAgICAkRmlsZSA9fiBze1wvXC99ey99c214ZzsKICAgICAgICBteSAlRmlsZURldGFpbHMgPSAkU2VsZi0+RmlsZURldGFpbHMoCiAgICAgICAgICAgIEZpbGUgPT4gJEZpbGUsCiAgICAgICAgICAgIFR5cGUgPT4gJ0NoYW5nZWQnLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57RmlsZXN9LT57JEZpbGV9ID0gXCVGaWxlRGV0YWlsczsKCiAgICAgICAgcHVzaCBAQ2hhbmdlZEZpbGVzLCBcJUZpbGVEZXRhaWxzOwoKICAgIH0KCiAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxAQ2hhbmdlZEZpbGVzLAogICAgKTsKCiAgICByZXR1cm4gQENoYW5nZWRGaWxlczsKfQoKc3ViIEZpbGVEZXRhaWxzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkVGltZU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKICAgIG15ICRNYWluT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICRIb21lID0gJENvbmZpZ09iamVjdC0+R2V0KCdIb21lJyk7CiAgICBteSAkRmlsZSA9ICRQYXJhbXtGaWxlfTsKCiAgICBteSAkU3RhdCAgICAgICAgPSBzdGF0KCRGaWxlKTsKICAgIG15ICRDaGFuZ2VkICAgICA9ICRTdGF0ID8gJFN0YXQtPm10aW1lKCkgOiAnJzsKICAgIG15ICRDcmVhdGVkICAgICA9ICRTdGF0ID8gJFN0YXQtPmN0aW1lKCkgOiAnJzsKICAgIG15ICRNb2RlICAgICAgICA9ICRTdGF0ID8gJFN0YXQtPm1vZGUoKSA6ICcnOwogICAgbXkgJFBlcm1pc3Npb25zID0gJFN0YXQgPyAoIHNwcmludGYgJyUwNG8nLCAkTW9kZSAmIDA3Nzc3ICkgOiAnJzsgICAgIyMgbm8gY3JpdGljCiAgICBteSAkVXNlciAgICAgICAgPSAkU3RhdCA/IGdldGdyZ2lkKCAkU3RhdC0+Z2lkICkgOiAnJzsgICAgICAgICAgICAgICAjIyBubyBjcml0aWMKICAgIG15ICRHcm91cCAgICAgICA9ICRTdGF0ID8gZ2V0cHd1aWQoICRTdGF0LT51aWQgKSA6ICcnOyAgICAgICAgICAgICAgICMjIG5vIGNyaXRpYwogICAgbXkgJEZ1bGxQYXRoICAgID0gJEZpbGU7CiAgICBteSAkRmlsZU5hbWUgICAgPSAkRmlsZTsKCiAgICAkRmlsZU5hbWUgPX4gc3suK1wvKC4qKX17JDF9c214ZzsKICAgICRGaWxlICAgICA9fiBzeyRIb21lXC99e31zbXhnOwoKICAgIG15ICRDaGFuZ2VkVGltZVN0YW1wID0gJFN0YXQKICAgICAgICA/ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRDaGFuZ2VkLAogICAgICAgICkKICAgICAgICA6ICcnOwoKICAgIG15ICRDcmVhdGVkVGltZVN0YW1wID0gJFN0YXQKICAgICAgICA/ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRDcmVhdGVkLAogICAgICAgICkKICAgICAgICA6ICcnOwoKICAgIG15ICVGaWxlRGV0YWlscyA9ICgKICAgICAgICBUeXBlICAgICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIEZ1bGxQYXRoICAgICA9PiAkRnVsbFBhdGgsCiAgICAgICAgUGF0aCAgICAgICAgID0+ICRGaWxlLAogICAgICAgIE5hbWUgICAgICAgICA9PiAkRmlsZU5hbWUsCiAgICAgICAgQ2hhbmdlZCAgICAgID0+ICRDaGFuZ2VkVGltZVN0YW1wLAogICAgICAgIENyZWF0ZWQgICAgICA9PiAkQ3JlYXRlZFRpbWVTdGFtcCwKICAgICAgICBVc2VyICAgICAgICAgPT4gJFVzZXIsCiAgICAgICAgR3JvdXAgICAgICAgID0+ICRHcm91cCwKICAgICAgICBQZXJtaXNzaW9ucyAgPT4gJFBlcm1pc3Npb25zLAogICAgICAgIFBhY2thZ2UgICAgICA9PiAkU2VsZi0+e0ZpbGVzfS0+eyRGdWxsUGF0aH0tPntQYWNrYWdlfSB8fCAnJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJFN0YXQgPyAoICRTZWxmLT57RmlsZXN9LT57JEZ1bGxQYXRofS0+e1N0YXRlfSB8fCAnV2FybmluZycgKSA6ICdNaXNzaW5nIG9yIG5vdCByZWFkYWJsZScsCiAgICAgICAgU3RhdGVNZXNzYWdlID0+ICRTZWxmLT57RmlsZXN9LT57JEZ1bGxQYXRofS0+e1N0YXRlTWVzc2FnZX0gfHwgJ1Vua25vd24nLAogICAgKTsKCiAgICByZXR1cm4gJUZpbGVEZXRhaWxzIGlmICEkUGFyYW17RXh0ZW5kZWR9IHx8ICEkU3RhdDsKCiAgICBteSAlRXh0ZW5kZWQgPSAkU2VsZi0+RmlsZURldGFpbHNFeHRlbmRlZCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgJUZpbGVEZXRhaWxzLAogICAgKTsKICAgICVGaWxlRGV0YWlscyA9ICgKICAgICAgICAlRmlsZURldGFpbHMsCiAgICAgICAgJUV4dGVuZGVkCiAgICApOwoKICAgIHJldHVybiAlRmlsZURldGFpbHM7Cn0KCnN1YiBGaWxlRGV0YWlsc0V4dGVuZGVkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE1haW5PYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwogICAgbXkgJFBhY2thZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UGFja2FnZScpOwogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENhY2hlT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICBteSAkQ2FjaGVLZXkgPSAnRmlsZURldGFpbHNFeHRlbmRlZDo6JyAuICRQYXJhbXtGdWxsUGF0aH07CiAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgIyAgICAgcmV0dXJuICV7JENhY2hlfSBpZiBJc0hhc2hSZWZXaXRoRGF0YSgkQ2FjaGUpOwoKICAgIG15ICVFeHRlbmRlZDsKCiAgICBteSAkQ29udGVudCA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICBMb2NhdGlvbiA9PiAkUGFyYW17RnVsbFBhdGh9LAogICAgKTsKCiAgICAkRXh0ZW5kZWR7TUQ1fSA9ICRNYWluT2JqZWN0LT5NRDVzdW0oCiAgICAgICAgU3RyaW5nID0+ICRDb250ZW50LAogICAgKTsKCiAgICBteSAkT3JpZ2luYWxQYXRoID0gJFBhcmFte0Z1bGxQYXRofTsKCiAgICAkUGFyYW17VHlwZX0gLy89ICdQYWNrYWdlJzsKCiAgICBpZiAoICRQYXJhbXtUeXBlfSBlcSAnUGFja2FnZScgKSB7CgogICAgICAgIG15IEBSZXBvc2l0b3J5TGlzdCA9ICRQYWNrYWdlT2JqZWN0LT5SZXBvc2l0b3J5TGlzdCgKCiAgICAgICAgICAgICMgd2lsbCBvbmx5IHJldHVybiBuYW1lLCB2ZXJzaW9uLCBpbnN0YWxsX3N0YXR1cyBtZDVzdW0gYW5kIHZlbmRvcmluc3RlYWQgb2YgdGhlIHN0cnVjdHVyZQogICAgICAgICAgICBSZXN1bHQgPT4gJ3Nob3J0JywKICAgICAgICApOwoKICAgICAgICBteSAlUmVwb3NpdG9yeSA9IG1hcCB7ICRfLT57TmFtZX0gPT4gJF8tPntWZXJzaW9ufSB9IEBSZXBvc2l0b3J5TGlzdDsKCiAgICAgICAgbXkgJFBhY2thZ2UgPSAkUGFja2FnZU9iamVjdC0+UmVwb3NpdG9yeUdldCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkUGFyYW17UGFja2FnZX0sCiAgICAgICAgICAgIFZlcnNpb24gPT4gJFJlcG9zaXRvcnl7ICRQYXJhbXtQYWNrYWdlfSB9LAogICAgICAgICAgICBSZXN1bHQgID0+ICdTQ0FMQVInLAogICAgICAgICk7CgogICAgICAgIG15ICVTdHJ1Y3R1cmUgPSAkUGFja2FnZU9iamVjdC0+UGFja2FnZVBhcnNlKCBTdHJpbmcgPT4gJFBhY2thZ2UgKTsKCiAgICAgICAgbXkgJE9yaWdpbmFsQ29udGVudCA9ICcnOwogICAgICAgIGlmICggcmVmICRTdHJ1Y3R1cmV7RmlsZWxpc3R9IGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgIGZvciBteSAkSGFzaCAoIEB7ICRTdHJ1Y3R1cmV7RmlsZWxpc3R9IH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRIYXNoLT57TG9jYXRpb259IGVxICRQYXJhbXtQYXRofSApIHsKICAgICAgICAgICAgICAgICAgICAkT3JpZ2luYWxDb250ZW50ID0gJEhhc2gtPntDb250ZW50fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJEV4dGVuZGVke09yaWdpbmFsTUQ1fSA9ICRNYWluT2JqZWN0LT5NRDVzdW0oCiAgICAgICAgICAgIFN0cmluZyA9PiAkT3JpZ2luYWxDb250ZW50LAogICAgICAgICk7CgogICAgICAgIG15ICRDdXJyZW50Q29udGVudCA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICAgICAgTG9jYXRpb24gPT4gJFBhcmFte0Z1bGxQYXRofSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRFeHRlbmRlZHtNRDV9IG5lICRFeHRlbmRlZHtPcmlnaW5hbE1ENX0gKSB7CiAgICAgICAgICAgICRNYWluT2JqZWN0LT5SZXF1aXJlKCdUZXh0OjpEaWZmOjpGb3JtYXR0ZWRIVE1MJyk7CiAgICAgICAgICAgICRFeHRlbmRlZHtEaWZmfSA9IGRpZmZfc3RyaW5ncyggJE9yaWdpbmFsQ29udGVudCwgJCRDdXJyZW50Q29udGVudCApOwogICAgICAgIH0KCiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtUeXBlfSBlcSAnQ3VzdG9tJyApIHsKCiAgICAgICAgJE9yaWdpbmFsUGF0aCA9fiBze0N1c3RvbVwvfXt9c214ZzsKCiAgICAgICAgaWYgKCAhLWUgJE9yaWdpbmFsUGF0aCApIHsKICAgICAgICAgICAgJEV4dGVuZGVke1N0YXRlfSAgICAgICAgPSAnUHJvYmxlbSc7CiAgICAgICAgICAgICRFeHRlbmRlZHtTdGF0ZU1lc3NhZ2V9ID0gJ09yaWdpbmFsIGZpbGUgbm90IGV4aXN0cy4nOwogICAgICAgICAgICAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ICA9ICdPcmlnaW5hbCBmaWxlIG5vdCBleGlzdHMuJzsKICAgICAgICAgICAgcmV0dXJuICVFeHRlbmRlZDsKICAgICAgICB9CgogICAgICAgIG15ICRPcmlnaW5hbENvbnRlbnQgPSAkTWFpbk9iamVjdC0+RmlsZVJlYWQoCiAgICAgICAgICAgIExvY2F0aW9uID0+ICRPcmlnaW5hbFBhdGgsCiAgICAgICAgKTsKICAgICAgICAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ID0gJE1haW5PYmplY3QtPk1ENXN1bSgKICAgICAgICAgICAgU3RyaW5nID0+ICRPcmlnaW5hbENvbnRlbnQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkRXh0ZW5kZWR7TUQ1fSBuZSAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ICkgewogICAgICAgICAgICAkTWFpbk9iamVjdC0+UmVxdWlyZSgnVGV4dDo6RGlmZjo6Rm9ybWF0dGVkSFRNTCcpOwogICAgICAgICAgICAkRXh0ZW5kZWR7RGlmZn0gPSBkaWZmX2ZpbGVzKCAkT3JpZ2luYWxQYXRoLCAkUGFyYW17RnVsbFBhdGh9ICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17VHlwZX0gZXEgJ0NoYW5nZWQnICkgewoKICAgICAgICAjIGUuZy4gNi40LjIKICAgICAgICBteSAkVmVyc2lvbiA9ICRDb25maWdPYmplY3QtPkdldCgnVmVyc2lvbicpOwoKICAgICAgICAkVmVyc2lvbiA9fiBze1wueFx6fXt9aTsgICAgICMgNi40LnggPT4gNi40IChsYXRlc3QpCiAgICAgICAgJFZlcnNpb24gPX4gc3tcLn17X31zbXhnOyAgICAjIDYuNC4yID0+IDZfNF8yCiAgICAgICAgJFZlcnNpb24gPSAncmVsLScgLiAkVmVyc2lvbjsgICAgIyA2XzRfMiA9PiByZWwtNl80XzIKCiAgICAgICAgbXkgJFdlYlVzZXJBZ2VudE9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpXZWJVc2VyQWdlbnQtPm5ldygKICAgICAgICAgICAgVGltZW91dCA9PiAxNSwKICAgICAgICApOwoKICAgICAgICAjICBlLmcuOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vem51bnkvem51bnkvcmVsLTZfNS9LZXJuZWwvR2VuZXJpY0ludGVyZmFjZS9FdmVudC9IYW5kbGVyLnBtCiAgICAgICAgbXkgJFVSTCAgICAgID0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS96bnVueS96bnVueS8iIC4gJFZlcnNpb24gLiAiLyIgLiAkUGFyYW17UGF0aH07CiAgICAgICAgbXkgJVJlc3BvbnNlID0gJFdlYlVzZXJBZ2VudE9iamVjdC0+UmVxdWVzdCgKICAgICAgICAgICAgVVJMICAgPT4gJFVSTCwKICAgICAgICAgICAgTm9Mb2cgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRSZXNwb25zZXtTdGF0dXN9IGVxICcyMDAgT0snICYmICRSZXNwb25zZXtDb250ZW50fSApIHsKICAgICAgICAgICAgJEV4dGVuZGVke09yaWdpbmFsTUQ1fSA9ICRNYWluT2JqZWN0LT5NRDVzdW0oCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFJlc3BvbnNle0NvbnRlbnR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkRXh0ZW5kZWR7TUQ1fSBuZSAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ICkgewogICAgICAgICAgICAgICAgJE1haW5PYmplY3QtPlJlcXVpcmUoJ1RleHQ6OkRpZmY6OkZvcm1hdHRlZEhUTUwnKTsKICAgICAgICAgICAgICAgICRFeHRlbmRlZHtEaWZmfSA9IGRpZmZfc3RyaW5ncyggJHsgJFJlc3BvbnNle0NvbnRlbnR9IH0sICQkQ29udGVudCApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVFeHRlbmRlZCwKICAgICk7CgogICAgcmV0dXJuICVFeHRlbmRlZDsKfQoKc3ViIF9Jc1pudW55RmlsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIHJldHVybiBpZiAhSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte0ZpbGV9ICk7CgogICAgbXkgJEFic29sdXRlRmlsZVBhdGggPSBhYnNfcGF0aCggJFBhcmFte0ZpbGV9ICk7CgogICAgbXkgJEhvbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKTsKCiAgICByZXR1cm4gaWYgJEFic29sdXRlRmlsZVBhdGggIX4gbXtcQVxRJEhvbWVcRX07CgogICAgcmV0dXJuIDE7Cn0KCgoxOwoAAAAAAAAAANlaAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADVAQAAAAAAAOIBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					295,
-					1,
-					"revert",
-					null,
-					"AgAAAAAAAAAAAAAAAAAAAAAAAADZWgAAIyAtLQojIENvcHlyaWdodCAoQykgMjAyMSBabnVueSBHbWJILCBodHRwczovL3pudW55Lm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pblN5c3RlbUZpbGVzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpXZWJVc2VyQWdlbnQ7CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBUZXh0OjpEaWZmOjpGb3JtYXR0ZWRIVE1MOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBGaWxlOjpzdGF0OwoKdXNlIEN3ZCAnYWJzX3BhdGgnOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpQYWNrYWdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3VwcG9ydEJ1bmRsZUdlbmVyYXRvcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpbWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnQWRtaW5TeXN0ZW1GaWxlcyc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQ7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ2FjaGVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICBteSAkVGltZU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKCiAgICBteSBAUGFyYW1OYW1lcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW1OYW1lcygpOwoKICAgIGZvciBteSAkVmFsdWUgKEBQYXJhbU5hbWVzKSB7CiAgICAgICAgJFBhcmFteyRWYWx1ZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkVmFsdWUgKSB8fCAnJzsKICAgIH0KCiAgICAkUGFyYW17Q2FjaGVEYXRlfSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0NhY2hlRGF0ZScsCiAgICApOwoKICAgIGlmICggISRQYXJhbXtDYWNoZURhdGV9ICkgewogICAgICAgICRQYXJhbXtDYWNoZURhdGV9ID0gJFRpbWVPYmplY3QtPkN1cnJlbnRUaW1lc3RhbXAoKTsKICAgICAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0NhY2hlRGF0ZScsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtDYWNoZURhdGV9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJElzWm51bnlGaWxlID0gJFNlbGYtPl9Jc1pudW55RmlsZSgKICAgICAgICBGaWxlID0+ICRQYXJhbXtGaWxlfQogICAgKTsKCiAgICBpZiAoICRQYXJhbXtGaWxlfSAmJiAhJElzWm51bnlGaWxlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0ZpbGUgbm90IGZvdW5kLicpLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0ZpbGV9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTaWRlYmFyJywKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWx0ZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbQogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QWRkSlNPbkRvY3VtZW50Q29tcGxldGVJZk5vdEV4aXN0cygKICAgICAgICBLZXkgID0+ICdBZG1pblN5c3RlbUZpbGVzLkluaXRUYWJsZUZpbHRlcicsCiAgICAgICAgQ29kZSA9PiAnCiAgICAgICAgICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQoIiNGaWx0ZXJGaWxlcyIpLCAkKCIuRmlsZXMiKSwyLDEpOwogICAgICAgICAgICAkKCIjRmlsdGVyRmlsZXMiKS5mb2N1cygpOwogICAgICAgICcsCiAgICApOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDYWNoZURlbGV0ZScgKSB7CgogICAgICAgICMgZGVsZXRlIGNhY2hlCiAgICAgICAgJENhY2hlT2JqZWN0LT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IgogICAgICAgICk7CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU3lzdGVtRmlsZXMnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9CiAgICApOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdWaWV3RmlsZScgKSB7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X1ZpZXdGaWxlKCVQYXJhbSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fU2hvd092ZXJ2aWV3KCk7CiAgICB9CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9TaG93T3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRPdXRwdXQ7CiAgICBteSBARmlsZXMgPSAkU2VsZi0+R2V0RmlsZXMoKTsKCiAgICBmb3IgbXkgJFdpZGdldCAocXcoQ3VzdG9tIENoYW5nZWQgUGFja2FnZSkpIHsKICAgICAgICBteSBARmlsZXMgPSBncmVwIHsgJFdpZGdldCBlcSAkXy0+e1R5cGV9IH0gQEZpbGVzOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fU2hvd0ZpbGVzV2lkZ2V0KAogICAgICAgICAgICBGaWxlcyAgPT4gXEBGaWxlcywKICAgICAgICAgICAgV2lkZ2V0ID0+ICRXaWRnZXQsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9WaWV3RmlsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkTG9nT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJE1haW5PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgTkVFREVEOgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpbGUpKSB7CgogICAgICAgIG5leHQgTkVFREVEIGlmIGRlZmluZWQgJFBhcmFteyROZWVkZWR9OwogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlBhcmFtZXRlciAnJE5lZWRlZCcgaXMgbmVlZGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFNlbGYtPlBhY2thZ2VGaWxlcyggQ2FjaGUgPT4gMCApOwoKICAgIG15ICRDb250ZW50ID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgIExvY2F0aW9uID0+ICRQYXJhbXtGaWxlfSwKICAgICk7CgogICAgbXkgJUZpbGVEZXRhaWxzID0gJFNlbGYtPkZpbGVEZXRhaWxzKAogICAgICAgIEZpbGUgICAgID0+ICRQYXJhbXtGaWxlfSwKICAgICAgICBUeXBlICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgRXh0ZW5kZWQgPT4gMSwKICAgICk7CgogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKHF3KE5hbWUgUGF0aCBGdWxsUGF0aCBVc2VyIEdyb3VwIENyZWF0ZWQgQ2hhbmdlZCAgKSkgewogICAgICAgIG5leHQgS0VZIGlmICEkRmlsZURldGFpbHN7JEtleX07CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWxlRGV0YWlscycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWxlRGV0YWlsc3skS2V5fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKHF3KFR5cGUgUGFja2FnZSBTdGF0ZSBTdGF0ZU1lc3NhZ2UgUGVybWlzc2lvbnMgTUQ1IE9yaWdpbmFsTUQ1KSkgewogICAgICAgIG5leHQgS0VZIGlmICEkRmlsZURldGFpbHN7JEtleX07CiAgICAgICAgaWYgKCAkS2V5IGVxICdUeXBlJyApIHsKICAgICAgICAgICAgJEZpbGVEZXRhaWxzeyRLZXl9ID0gJFNlbGYtPntGaWxlc30tPnsgJEZpbGVEZXRhaWxze0Z1bGxQYXRofSB9LT57VHlwZX0gfHwgJEZpbGVEZXRhaWxzeyRLZXl9OwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRmlsZURldGFpbHNFeHRlbmRlZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWxlRGV0YWlsc3skS2V5fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJEZpbGVEZXRhaWxze0RpZmZ9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWxlRGlmZicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRmlsZSAgICA9PiAkRmlsZURldGFpbHN7TmFtZX0sCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRGaWxlRGV0YWlsc3tEaWZmfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblN5c3RlbUZpbGVzL0ZpbGUnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIEZpbGUgICAgPT4gJEZpbGVEZXRhaWxze05hbWV9LAogICAgICAgICAgICBDb250ZW50ID0+ICRDb250ZW50ID8gJHskQ29udGVudH0gOiAnJywKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9TaG93RmlsZXNXaWRnZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExhbmd1YWdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpOwoKICAgIG15IEBGaWxlcyA9IEB7ICRQYXJhbXtGaWxlc30gfTsKCiAgICBpZiAoICRQYXJhbXtXaWRnZXR9IGVxICdQYWNrYWdlJyApIHsKCiAgICAgICAgIyBmb3IgZWFjaCBwYWNrYWdlIGdlbmVyYXRlIG93biB3aWRnZXQKICAgICAgICBteSAlUGFja2FnZXMgPSBtYXAgeyAkXy0+e1BhY2thZ2V9ID0+IDEgfSBARmlsZXM7CgogICAgICAgIGZvciBteSAkUGFja2FnZSAoIHNvcnQga2V5cyAlUGFja2FnZXMgKSB7CiAgICAgICAgICAgIG15IEBGaWxlcyA9IGdyZXAgeyAkUGFja2FnZSBlcSAkXy0+e1BhY2thZ2V9IH0gQEZpbGVzOwoKICAgICAgICAgICAgbXkgJFRyYW5zbGF0ZWRXaWRnZXROYW1lID0gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoICdQYWNrYWdlIGZpbGVzIC0gJXMnLCAkUGFja2FnZSApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdXaWRnZXQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICRUcmFuc2xhdGVkV2lkZ2V0TmFtZSwKICAgICAgICAgICAgICAgICAgICBXaWRnZXQgPT4gJFBhcmFte1dpZGdldH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRGaWxlIChARmlsZXMpIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZpbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgPT4gJFBhcmFte1dpZGdldH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbGV9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgbXkgJEhpbnQ7CiAgICAgICAgaWYgKCAkUGFyYW17V2lkZ2V0fSBlcSAnQ2hhbmdlZCcgKSB7CiAgICAgICAgICAgICRIaW50ID0gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnKEZpbGVzIHdoZXJlIG9ubHkgdGhlIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBjaGFuZ2VkIHdpbGwgbm90IGJlIGRpc3BsYXllZC4pJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnV2lkZ2V0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gJFBhcmFte1dpZGdldH0gLiAnIGZpbGVzJywKICAgICAgICAgICAgICAgIEhpbnQgICA9PiAkSGludCwKICAgICAgICAgICAgICAgIFdpZGdldCA9PiAkUGFyYW17V2lkZ2V0fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJEZpbGUgKEBGaWxlcykgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkU2VsZi0+e0ZpbGVzfS0+eyAkRmlsZS0+e0Z1bGxQYXRofSB9LT57UGFja2FnZX0KICAgICAgICAgICAgICAgICYmICRTZWxmLT57RmlsZXN9LT57ICRGaWxlLT57RnVsbFBhdGh9IH0tPntTdGF0ZX0gbmUgJ09LJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRmlsZS0+e1R5cGV9ID0gJ1BhY2thZ2UnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZpbGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgV2lkZ2V0ID0+ICRQYXJhbXtXaWRnZXR9LAogICAgICAgICAgICAgICAgICAgICV7JEZpbGV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU3lzdGVtRmlsZXMvV2lkZ2V0JywKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCj1oZWFkMiBHZXRGaWxlcygpCgpyZXR1cm5zIGFsbCBjdXN0b20sIHBhY2thZ2UgYW5kIGNoYW5nZWQgZmlsZXMuCgogICAgbXkgQEZpbGVzID0gJE9iamVjdC0+R2V0RmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQEZpbGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgJ1N0YXRlTWVzc2FnZScgPT4gJ09LJywKICAgICAgICAgICAgJ1BhdGgnICAgICAgICAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML0N1c3RvbS54bWwnLAogICAgICAgICAgICAnVHlwZScgICAgICAgICA9PiAnUGFja2FnZScsCiAgICAgICAgICAgICdHcm91cCcgICAgICAgID0+ICd3d3ctZGF0YScsCiAgICAgICAgICAgICdVc2VyJyAgICAgICAgID0+ICdzdGFmZicsCiAgICAgICAgICAgICdOYW1lJyAgICAgICAgID0+ICdDdXN0b20ueG1sJywKICAgICAgICAgICAgJ1Blcm1pc3Npb25zJyAgPT4gJzA2NjAnLAogICAgICAgICAgICAnU3RhdGUnICAgICAgICA9PiAnT0snLAogICAgICAgICAgICAnUGFja2FnZScgICAgICA9PiAnQ3VzdG9tJywKICAgICAgICAgICAgJ0Z1bGxQYXRoJyAgICAgPT4gJy93b3Jrc3BhY2Uvem51bnkvem51bnlfNzBOZXcvS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvQ3VzdG9tLnhtbCcsCiAgICAgICAgICAgICdDcmVhdGVkJyAgICAgID0+ICcyMDE5LTEwLTI4IDA5OjM2OjAzJywKICAgICAgICAgICAgJ0NoYW5nZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICdTdGF0ZU1lc3NhZ2UnID0+ICdPSycsCiAgICAgICAgICAgICdQYXRoJyAgICAgICAgID0+ICdDdXN0b20vS2VybmVsL1N5c3RlbS9UaWNrZXQucG0nLAogICAgICAgICAgICAnVHlwZScgICAgICAgICA9PiAnQ3VzdG9tJywKICAgICAgICAgICAgJ0dyb3VwJyAgICAgICAgPT4gJ3d3dy1kYXRhJywKICAgICAgICAgICAgJ1VzZXInICAgICAgICAgPT4gJ3N0YWZmJywKICAgICAgICAgICAgJ05hbWUnICAgICAgICAgPT4gJ1RpY2tldC5wbScsCiAgICAgICAgICAgICdQZXJtaXNzaW9ucycgID0+ICcwNjYwJywKICAgICAgICAgICAgJ1N0YXRlJyAgICAgICAgPT4gJ09LJywKICAgICAgICAgICAgJ0Z1bGxQYXRoJyAgICAgPT4gJy93b3Jrc3BhY2Uvem51bnkvem51bnlfNzBOZXcvQ3VzdG9tL0tlcm5lbC9TeXN0ZW0vVGlja2V0LnBtJywKICAgICAgICAgICAgJ0NyZWF0ZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnLAogICAgICAgICAgICAnQ2hhbmdlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycKICAgICAgICB9LAogICAgICAgIC4uLgogICAgKTsKCj1jdXQKCnN1YiBHZXRGaWxlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBGaWxlczsKICAgIHB1c2ggQEZpbGVzLCAkU2VsZi0+UGFja2FnZUZpbGVzKCk7CiAgICBwdXNoIEBGaWxlcywgJFNlbGYtPkN1c3RvbUZpbGVzKCk7CiAgICBwdXNoIEBGaWxlcywgJFNlbGYtPkNoYW5nZWRGaWxlcygpOwoKICAgIHJldHVybiBARmlsZXM7Cn0KCj1oZWFkMiBQYWNrYWdlRmlsZXMoKQoKcmV0dXJucyBhbGwgcGFja2FnZSBmaWxlcy4KCiAgICBteSBAUGFja2FnZUZpbGVzID0gJE9iamVjdC0+UGFja2FnZUZpbGVzKCk7CgpSZXR1cm5zOgoKICAgIG15IEBQYWNrYWdlRmlsZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICAnU3RhdGVNZXNzYWdlJyA9PiAnT0snLAogICAgICAgICAgICAnUGF0aCcgICAgICAgICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvQ3VzdG9tLnhtbCcsCiAgICAgICAgICAgICdUeXBlJyAgICAgICAgID0+ICdQYWNrYWdlJywKICAgICAgICAgICAgJ0dyb3VwJyAgICAgICAgPT4gJ3d3dy1kYXRhJywKICAgICAgICAgICAgJ1VzZXInICAgICAgICAgPT4gJ3N0YWZmJywKICAgICAgICAgICAgJ05hbWUnICAgICAgICAgPT4gJ0N1c3RvbS54bWwnLAogICAgICAgICAgICAnUGVybWlzc2lvbnMnICA9PiAnMDY2MCcsCiAgICAgICAgICAgICdTdGF0ZScgICAgICAgID0+ICdPSycsCiAgICAgICAgICAgICdQYWNrYWdlJyAgICAgID0+ICdDdXN0b20nLAogICAgICAgICAgICAnRnVsbFBhdGgnICAgICA9PiAnL3dvcmtzcGFjZS96bnVueS96bnVueV83ME5ldy9LZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9DdXN0b20ueG1sJywKICAgICAgICAgICAgJ0NyZWF0ZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnLAogICAgICAgICAgICAnQ2hhbmdlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycKICAgICAgICB9LAogICAgICAgIC4uLgogICAgKTsKCj1jdXQKCnN1YiBQYWNrYWdlRmlsZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFja2FnZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQYWNrYWdlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkQ2FjaGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRDYWNoZUtleSA9ICdQYWNrYWdlRmlsZXMnOwogICAgbXkgJENhY2hlICAgID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgICRQYXJhbXtDYWNoZX0gLy89IDE7CiAgICByZXR1cm4gQHskQ2FjaGV9IGlmIElzQXJyYXlSZWZXaXRoRGF0YSgkQ2FjaGUpICYmICRQYXJhbXtDYWNoZX07CgogICAgbXkgJEhvbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKTsKCiAgICBteSBAUmVwb3NpdG9yeUxpc3QgPSAkUGFja2FnZU9iamVjdC0+UmVwb3NpdG9yeUxpc3QoCiAgICAgICAgUmVzdWx0ID0+ICdzaG9ydCcsCiAgICApOwoKICAgIG15IEBQYWNrYWdlRmlsZXM7CiAgICBmb3IgbXkgJFJlcG9zaXRvcnkgKEBSZXBvc2l0b3J5TGlzdCkgewoKICAgICAgICAjIGRlcGxveSBjaGVjawogICAgICAgIG15ICREZXBsb3llZCA9ICRQYWNrYWdlT2JqZWN0LT5EZXBsb3lDaGVjaygKICAgICAgICAgICAgJXskUmVwb3NpdG9yeX0sCiAgICAgICAgICAgIExvZyA9PiAwLAogICAgICAgICk7CiAgICAgICAgbXkgJURlcGxveUluZm8gPSAkUGFja2FnZU9iamVjdC0+RGVwbG95Q2hlY2tJbmZvKCk7CgogICAgICAgIG15ICRQYWNrYWdlRmlsZSA9ICRQYWNrYWdlT2JqZWN0LT5QYWNrYWdlRmlsZUdldE1ENVN1bSgKICAgICAgICAgICAgJXskUmVwb3NpdG9yeX0sCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRGaWxlICggc29ydCBrZXlzICV7JFBhY2thZ2VGaWxlfSApIHsKICAgICAgICAgICAgJEZpbGUgPX4gc3tcL1wvfXsvfXNteGc7CiAgICAgICAgICAgIG15ICRSZWxhdGl2UGF0aCA9ICRGaWxlOwogICAgICAgICAgICAkUmVsYXRpdlBhdGggPX4gc3skSG9tZVwvfXt9c214ZzsKCiAgICAgICAgICAgIG15ICVGaWxlRGV0YWlscyA9ICRTZWxmLT5GaWxlRGV0YWlscygKICAgICAgICAgICAgICAgIEZpbGUgPT4gJEZpbGUsCiAgICAgICAgICAgICAgICBUeXBlID0+ICdQYWNrYWdlJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRGaWxlRGV0YWlsc3tQYWNrYWdlfSAgICAgID0gJFJlcG9zaXRvcnktPntOYW1lfTsKICAgICAgICAgICAgJEZpbGVEZXRhaWxze1N0YXRlfSAgICAgICAgPSAnT0snOwogICAgICAgICAgICAkRmlsZURldGFpbHN7U3RhdGVNZXNzYWdlfSA9ICdPSyc7CiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICREZXBsb3lJbmZve0ZpbGV9ICkgJiYgJERlcGxveUluZm97RmlsZX0tPnskUmVsYXRpdlBhdGh9ICkgewogICAgICAgICAgICAgICAgJEZpbGVEZXRhaWxze1N0YXRlfSAgICAgICAgPSAnUHJvYmxlbSc7CiAgICAgICAgICAgICAgICAkRmlsZURldGFpbHN7U3RhdGVNZXNzYWdlfSA9ICdGaWxlIGlzIGRpZmZlcmVudCEnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfSA9IFwlRmlsZURldGFpbHM7CgogICAgICAgICAgICBwdXNoIEBQYWNrYWdlRmlsZXMsIHsKICAgICAgICAgICAgICAgICVGaWxlRGV0YWlscywKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQFBhY2thZ2VGaWxlcywKICAgICk7CgogICAgcmV0dXJuIEBQYWNrYWdlRmlsZXM7Cn0KCj1oZWFkMiBDdXN0b21GaWxlcygpCgpyZXR1cm5zIGFsbCBjdXN0b20gZmlsZXMuCgogICAgbXkgQEN1c3RvbUZpbGVzID0gJE9iamVjdC0+Q3VzdG9tRmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQEN1c3RvbUZpbGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgJ1N0YXRlTWVzc2FnZScgPT4gJ09LJywKICAgICAgICAgICAgJ1BhdGgnICAgICAgICAgPT4gJ0N1c3RvbS9LZXJuZWwvU3lzdGVtL1RpY2tldC5wbScsCiAgICAgICAgICAgICdUeXBlJyAgICAgICAgID0+ICdDdXN0b20nLAogICAgICAgICAgICAnR3JvdXAnICAgICAgICA9PiAnd3d3LWRhdGEnLAogICAgICAgICAgICAnVXNlcicgICAgICAgICA9PiAnc3RhZmYnLAogICAgICAgICAgICAnTmFtZScgICAgICAgICA9PiAnVGlja2V0LnBtJywKICAgICAgICAgICAgJ1Blcm1pc3Npb25zJyAgPT4gJzA2NjAnLAogICAgICAgICAgICAnU3RhdGUnICAgICAgICA9PiAnT0snLAogICAgICAgICAgICAnRnVsbFBhdGgnICAgICA9PiAnL3dvcmtzcGFjZS96bnVueS96bnVueV83ME5ldy9DdXN0b20vS2VybmVsL1N5c3RlbS9UaWNrZXQucG0nLAogICAgICAgICAgICAnQ3JlYXRlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycsCiAgICAgICAgICAgICdDaGFuZ2VkJyAgICAgID0+ICcyMDE5LTEwLTI4IDA5OjM2OjAzJwogICAgICAgIH0sCiAgICAgICAgLi4uCiAgICApOwoKPWN1dAoKc3ViIEN1c3RvbUZpbGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE1haW5PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRUaW1lT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwogICAgbXkgJENhY2hlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRDYWNoZUtleSA9ICdDdXN0b21GaWxlcyc7CiAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgcmV0dXJuIEB7JENhY2hlfSBpZiBJc0FycmF5UmVmV2l0aERhdGEoJENhY2hlKTsKCiAgICBteSAkSG9tZSA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpOwoKICAgIG15IEBGaWxlcyA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkSG9tZSAuICcvQ3VzdG9tLycsCiAgICAgICAgRmlsdGVyICAgID0+ICcqLionLAogICAgICAgIFJlY3Vyc2l2ZSA9PiAxLAogICAgKTsKCiAgICBteSBAQ3VzdG9tRmlsZXM7CiAgICBmb3IgbXkgJEZpbGUgKEBGaWxlcykgewogICAgICAgICRGaWxlID1+IHN7XC9cL317L31zbXhnOwogICAgICAgIG15ICVGaWxlRGV0YWlscyA9ICRTZWxmLT5GaWxlRGV0YWlscygKICAgICAgICAgICAgRmlsZSA9PiAkRmlsZSwKICAgICAgICAgICAgVHlwZSA9PiAnQ3VzdG9tJywKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfSA9IFwlRmlsZURldGFpbHM7CgogICAgICAgIHB1c2ggQEN1c3RvbUZpbGVzLCBcJUZpbGVEZXRhaWxzOwogICAgfQoKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBDdXN0b21GaWxlcywKICAgICk7CgogICAgcmV0dXJuIEBDdXN0b21GaWxlczsKfQoKPWhlYWQyIENoYW5nZWRGaWxlcygpCgpyZXR1cm5zIGFsbCBjaGFuZ2VkIGZpbGVzLgoKICAgIG15IEBDaGFuZ2VkRmlsZXMgPSAkT2JqZWN0LT5DaGFuZ2VkRmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQENoYW5nZWRGaWxlcyA9ICgKICAgICAgICB7CiAgICAgICAgICAgICdTdGF0ZU1lc3NhZ2UnID0+ICdPSycsCiAgICAgICAgICAgICdQYXRoJyAgICAgICAgID0+ICdLZXJuZWwvQ29uZmlnLnBtJywKICAgICAgICAgICAgJ1R5cGUnICAgICAgICAgPT4gJ0NoYW5nZWQnLAogICAgICAgICAgICAnR3JvdXAnICAgICAgICA9PiAnd3d3LWRhdGEnLAogICAgICAgICAgICAnVXNlcicgICAgICAgICA9PiAnc3RhZmYnLAogICAgICAgICAgICAnTmFtZScgICAgICAgICA9PiAnVGlja2V0LnBtJywKICAgICAgICAgICAgJ1Blcm1pc3Npb25zJyAgPT4gJzA2NjAnLAogICAgICAgICAgICAnU3RhdGUnICAgICAgICA9PiAnT0snLAogICAgICAgICAgICAnRnVsbFBhdGgnICAgICA9PiAnL3dvcmtzcGFjZS96bnVueS96bnVueV83ME5ldy9LZXJuZWwvQ29uZmlnLnBtJywKICAgICAgICAgICAgJ0NyZWF0ZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnLAogICAgICAgICAgICAnQ2hhbmdlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycKICAgICAgICB9LAogICAgICAgIC4uLgogICAgKTsKCj1jdXQKCnN1YiBDaGFuZ2VkRmlsZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTWFpbk9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENhY2hlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRDYWNoZUtleSA9ICdDaGFuZ2VkRmlsZXMnOwogICAgbXkgJENhY2hlICAgID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuIEB7JENhY2hlfSBpZiBJc0FycmF5UmVmV2l0aERhdGEoJENhY2hlKTsKCiAgICBteSAkU3VwcG9ydEJ1bmRsZUdlbmVyYXRvck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdXBwb3J0QnVuZGxlR2VuZXJhdG9yJyk7CgogICAgbXkgQENoYW5nZWRGaWxlczsKCiAgICBteSAkSG9tZSA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpOwoKICAgICRTdXBwb3J0QnVuZGxlR2VuZXJhdG9yT2JqZWN0LT57TUQ1U3VtTG9va3VwfSA9ICRTdXBwb3J0QnVuZGxlR2VuZXJhdG9yT2JqZWN0LT5fR2V0TUQ1U3VtTG9va3VwKCk7CiAgICBteSBATGlzdCA9ICRTdXBwb3J0QnVuZGxlR2VuZXJhdG9yT2JqZWN0LT5fR2V0Q3VzdG9tRmlsZUxpc3QoIERpcmVjdG9yeSA9PiAkSG9tZSApOwoKICAgIENIQU5HRURGSUxFOgogICAgZm9yIG15ICRGaWxlIChATGlzdCkgewogICAgICAgIG5leHQgQ0hBTkdFREZJTEUgaWYgJFNlbGYtPntGaWxlc30tPnskRmlsZX0gJiYgJFNlbGYtPntGaWxlc30tPnskRmlsZX0tPntUeXBlfSBlcSAnUGFja2FnZSc7CiAgICAgICAgbmV4dCBDSEFOR0VERklMRSBpZiAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfSAmJiAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfS0+e1R5cGV9IGVxICdDdXN0b20nOwoKICAgICAgICAkRmlsZSA9fiBze1wvXC99ey99c214ZzsKICAgICAgICBteSAlRmlsZURldGFpbHMgPSAkU2VsZi0+RmlsZURldGFpbHMoCiAgICAgICAgICAgIEZpbGUgPT4gJEZpbGUsCiAgICAgICAgICAgIFR5cGUgPT4gJ0NoYW5nZWQnLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57RmlsZXN9LT57JEZpbGV9ID0gXCVGaWxlRGV0YWlsczsKCiAgICAgICAgcHVzaCBAQ2hhbmdlZEZpbGVzLCBcJUZpbGVEZXRhaWxzOwoKICAgIH0KCiAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxAQ2hhbmdlZEZpbGVzLAogICAgKTsKCiAgICByZXR1cm4gQENoYW5nZWRGaWxlczsKfQoKc3ViIEZpbGVEZXRhaWxzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkVGltZU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKICAgIG15ICRNYWluT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICRIb21lID0gJENvbmZpZ09iamVjdC0+R2V0KCdIb21lJyk7CiAgICBteSAkRmlsZSA9ICRQYXJhbXtGaWxlfTsKCiAgICBteSAkU3RhdCAgICAgICAgPSBzdGF0KCRGaWxlKTsKICAgIG15ICRDaGFuZ2VkICAgICA9ICRTdGF0ID8gJFN0YXQtPm10aW1lKCkgOiAnJzsKICAgIG15ICRDcmVhdGVkICAgICA9ICRTdGF0ID8gJFN0YXQtPmN0aW1lKCkgOiAnJzsKICAgIG15ICRNb2RlICAgICAgICA9ICRTdGF0ID8gJFN0YXQtPm1vZGUoKSA6ICcnOwogICAgbXkgJFBlcm1pc3Npb25zID0gJFN0YXQgPyAoIHNwcmludGYgJyUwNG8nLCAkTW9kZSAmIDA3Nzc3ICkgOiAnJzsgICAgIyMgbm8gY3JpdGljCiAgICBteSAkVXNlciAgICAgICAgPSAkU3RhdCA/IGdldGdyZ2lkKCAkU3RhdC0+Z2lkICkgOiAnJzsgICAgICAgICAgICAgICAjIyBubyBjcml0aWMKICAgIG15ICRHcm91cCAgICAgICA9ICRTdGF0ID8gZ2V0cHd1aWQoICRTdGF0LT51aWQgKSA6ICcnOyAgICAgICAgICAgICAgICMjIG5vIGNyaXRpYwogICAgbXkgJEZ1bGxQYXRoICAgID0gJEZpbGU7CiAgICBteSAkRmlsZU5hbWUgICAgPSAkRmlsZTsKCiAgICAkRmlsZU5hbWUgPX4gc3suK1wvKC4qKX17JDF9c214ZzsKICAgICRGaWxlICAgICA9fiBzeyRIb21lXC99e31zbXhnOwoKICAgIG15ICRDaGFuZ2VkVGltZVN0YW1wID0gJFN0YXQKICAgICAgICA/ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRDaGFuZ2VkLAogICAgICAgICkKICAgICAgICA6ICcnOwoKICAgIG15ICRDcmVhdGVkVGltZVN0YW1wID0gJFN0YXQKICAgICAgICA/ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRDcmVhdGVkLAogICAgICAgICkKICAgICAgICA6ICcnOwoKICAgIG15ICVGaWxlRGV0YWlscyA9ICgKICAgICAgICBUeXBlICAgICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIEZ1bGxQYXRoICAgICA9PiAkRnVsbFBhdGgsCiAgICAgICAgUGF0aCAgICAgICAgID0+ICRGaWxlLAogICAgICAgIE5hbWUgICAgICAgICA9PiAkRmlsZU5hbWUsCiAgICAgICAgQ2hhbmdlZCAgICAgID0+ICRDaGFuZ2VkVGltZVN0YW1wLAogICAgICAgIENyZWF0ZWQgICAgICA9PiAkQ3JlYXRlZFRpbWVTdGFtcCwKICAgICAgICBVc2VyICAgICAgICAgPT4gJFVzZXIsCiAgICAgICAgR3JvdXAgICAgICAgID0+ICRHcm91cCwKICAgICAgICBQZXJtaXNzaW9ucyAgPT4gJFBlcm1pc3Npb25zLAogICAgICAgIFBhY2thZ2UgICAgICA9PiAkU2VsZi0+e0ZpbGVzfS0+eyRGdWxsUGF0aH0tPntQYWNrYWdlfSB8fCAnJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJFN0YXQgPyAoICRTZWxmLT57RmlsZXN9LT57JEZ1bGxQYXRofS0+e1N0YXRlfSB8fCAnV2FybmluZycgKSA6ICdNaXNzaW5nIG9yIG5vdCByZWFkYWJsZScsCiAgICAgICAgU3RhdGVNZXNzYWdlID0+ICRTZWxmLT57RmlsZXN9LT57JEZ1bGxQYXRofS0+e1N0YXRlTWVzc2FnZX0gfHwgJ1Vua25vd24nLAogICAgKTsKCiAgICByZXR1cm4gJUZpbGVEZXRhaWxzIGlmICEkUGFyYW17RXh0ZW5kZWR9IHx8ICEkU3RhdDsKCiAgICBteSAlRXh0ZW5kZWQgPSAkU2VsZi0+RmlsZURldGFpbHNFeHRlbmRlZCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgJUZpbGVEZXRhaWxzLAogICAgKTsKICAgICVGaWxlRGV0YWlscyA9ICgKICAgICAgICAlRmlsZURldGFpbHMsCiAgICAgICAgJUV4dGVuZGVkCiAgICApOwoKICAgIHJldHVybiAlRmlsZURldGFpbHM7Cn0KCnN1YiBGaWxlRGV0YWlsc0V4dGVuZGVkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE1haW5PYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwogICAgbXkgJFBhY2thZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UGFja2FnZScpOwogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENhY2hlT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICBteSAkQ2FjaGVLZXkgPSAnRmlsZURldGFpbHNFeHRlbmRlZDo6JyAuICRQYXJhbXtGdWxsUGF0aH07CiAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgIyAgICAgcmV0dXJuICV7JENhY2hlfSBpZiBJc0hhc2hSZWZXaXRoRGF0YSgkQ2FjaGUpOwoKICAgIG15ICVFeHRlbmRlZDsKCiAgICBteSAkQ29udGVudCA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICBMb2NhdGlvbiA9PiAkUGFyYW17RnVsbFBhdGh9LAogICAgKTsKCiAgICAkRXh0ZW5kZWR7TUQ1fSA9ICRNYWluT2JqZWN0LT5NRDVzdW0oCiAgICAgICAgU3RyaW5nID0+ICRDb250ZW50LAogICAgKTsKCiAgICBteSAkT3JpZ2luYWxQYXRoID0gJFBhcmFte0Z1bGxQYXRofTsKCiAgICAkUGFyYW17VHlwZX0gLy89ICdQYWNrYWdlJzsKCiAgICBpZiAoICRQYXJhbXtUeXBlfSBlcSAnUGFja2FnZScgKSB7CgogICAgICAgIG15IEBSZXBvc2l0b3J5TGlzdCA9ICRQYWNrYWdlT2JqZWN0LT5SZXBvc2l0b3J5TGlzdCgKCiAgICAgICAgICAgICMgd2lsbCBvbmx5IHJldHVybiBuYW1lLCB2ZXJzaW9uLCBpbnN0YWxsX3N0YXR1cyBtZDVzdW0gYW5kIHZlbmRvcmluc3RlYWQgb2YgdGhlIHN0cnVjdHVyZQogICAgICAgICAgICBSZXN1bHQgPT4gJ3Nob3J0JywKICAgICAgICApOwoKICAgICAgICBteSAlUmVwb3NpdG9yeSA9IG1hcCB7ICRfLT57TmFtZX0gPT4gJF8tPntWZXJzaW9ufSB9IEBSZXBvc2l0b3J5TGlzdDsKCiAgICAgICAgbXkgJFBhY2thZ2UgPSAkUGFja2FnZU9iamVjdC0+UmVwb3NpdG9yeUdldCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkUGFyYW17UGFja2FnZX0sCiAgICAgICAgICAgIFZlcnNpb24gPT4gJFJlcG9zaXRvcnl7ICRQYXJhbXtQYWNrYWdlfSB9LAogICAgICAgICAgICBSZXN1bHQgID0+ICdTQ0FMQVInLAogICAgICAgICk7CgogICAgICAgIG15ICVTdHJ1Y3R1cmUgPSAkUGFja2FnZU9iamVjdC0+UGFja2FnZVBhcnNlKCBTdHJpbmcgPT4gJFBhY2thZ2UgKTsKCiAgICAgICAgbXkgJE9yaWdpbmFsQ29udGVudCA9ICcnOwogICAgICAgIGlmICggcmVmICRTdHJ1Y3R1cmV7RmlsZWxpc3R9IGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgIGZvciBteSAkSGFzaCAoIEB7ICRTdHJ1Y3R1cmV7RmlsZWxpc3R9IH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRIYXNoLT57TG9jYXRpb259IGVxICRQYXJhbXtQYXRofSApIHsKICAgICAgICAgICAgICAgICAgICAkT3JpZ2luYWxDb250ZW50ID0gJEhhc2gtPntDb250ZW50fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJEV4dGVuZGVke09yaWdpbmFsTUQ1fSA9ICRNYWluT2JqZWN0LT5NRDVzdW0oCiAgICAgICAgICAgIFN0cmluZyA9PiAkT3JpZ2luYWxDb250ZW50LAogICAgICAgICk7CgogICAgICAgIG15ICRDdXJyZW50Q29udGVudCA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICAgICAgTG9jYXRpb24gPT4gJFBhcmFte0Z1bGxQYXRofSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRFeHRlbmRlZHtNRDV9IG5lICRFeHRlbmRlZHtPcmlnaW5hbE1ENX0gKSB7CiAgICAgICAgICAgICRNYWluT2JqZWN0LT5SZXF1aXJlKCdUZXh0OjpEaWZmOjpGb3JtYXR0ZWRIVE1MJyk7CiAgICAgICAgICAgICRFeHRlbmRlZHtEaWZmfSA9IGRpZmZfc3RyaW5ncyggJE9yaWdpbmFsQ29udGVudCwgJCRDdXJyZW50Q29udGVudCApOwogICAgICAgIH0KCiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtUeXBlfSBlcSAnQ3VzdG9tJyApIHsKCiAgICAgICAgJE9yaWdpbmFsUGF0aCA9fiBze0N1c3RvbVwvfXt9c214ZzsKCiAgICAgICAgaWYgKCAhLWUgJE9yaWdpbmFsUGF0aCApIHsKICAgICAgICAgICAgJEV4dGVuZGVke1N0YXRlfSAgICAgICAgPSAnUHJvYmxlbSc7CiAgICAgICAgICAgICRFeHRlbmRlZHtTdGF0ZU1lc3NhZ2V9ID0gJ09yaWdpbmFsIGZpbGUgbm90IGV4aXN0cy4nOwogICAgICAgICAgICAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ICA9ICdPcmlnaW5hbCBmaWxlIG5vdCBleGlzdHMuJzsKICAgICAgICAgICAgcmV0dXJuICVFeHRlbmRlZDsKICAgICAgICB9CgogICAgICAgIG15ICRPcmlnaW5hbENvbnRlbnQgPSAkTWFpbk9iamVjdC0+RmlsZVJlYWQoCiAgICAgICAgICAgIExvY2F0aW9uID0+ICRPcmlnaW5hbFBhdGgsCiAgICAgICAgKTsKICAgICAgICAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ID0gJE1haW5PYmplY3QtPk1ENXN1bSgKICAgICAgICAgICAgU3RyaW5nID0+ICRPcmlnaW5hbENvbnRlbnQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkRXh0ZW5kZWR7TUQ1fSBuZSAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ICkgewogICAgICAgICAgICAkTWFpbk9iamVjdC0+UmVxdWlyZSgnVGV4dDo6RGlmZjo6Rm9ybWF0dGVkSFRNTCcpOwogICAgICAgICAgICAkRXh0ZW5kZWR7RGlmZn0gPSBkaWZmX2ZpbGVzKCAkT3JpZ2luYWxQYXRoLCAkUGFyYW17RnVsbFBhdGh9ICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17VHlwZX0gZXEgJ0NoYW5nZWQnICkgewoKICAgICAgICAjIGUuZy4gNi40LjIKICAgICAgICBteSAkVmVyc2lvbiA9ICRDb25maWdPYmplY3QtPkdldCgnVmVyc2lvbicpOwoKICAgICAgICAkVmVyc2lvbiA9fiBze1wueFx6fXt9aTsgICAgICMgNi40LnggPT4gNi40IChsYXRlc3QpCiAgICAgICAgJFZlcnNpb24gPX4gc3tcLn17X31zbXhnOyAgICAjIDYuNC4yID0+IDZfNF8yCiAgICAgICAgJFZlcnNpb24gPSAncmVsLScgLiAkVmVyc2lvbjsgICAgIyA2XzRfMiA9PiByZWwtNl80XzIKCiAgICAgICAgbXkgJFdlYlVzZXJBZ2VudE9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpXZWJVc2VyQWdlbnQtPm5ldygKICAgICAgICAgICAgVGltZW91dCA9PiAxNSwKICAgICAgICApOwoKICAgICAgICAjICBlLmcuOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vem51bnkvem51bnkvcmVsLTZfNS9LZXJuZWwvR2VuZXJpY0ludGVyZmFjZS9FdmVudC9IYW5kbGVyLnBtCiAgICAgICAgbXkgJFVSTCAgICAgID0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS96bnVueS96bnVueS8iIC4gJFZlcnNpb24gLiAiLyIgLiAkUGFyYW17UGF0aH07CiAgICAgICAgbXkgJVJlc3BvbnNlID0gJFdlYlVzZXJBZ2VudE9iamVjdC0+UmVxdWVzdCgKICAgICAgICAgICAgVVJMICAgPT4gJFVSTCwKICAgICAgICAgICAgTm9Mb2cgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRSZXNwb25zZXtTdGF0dXN9IGVxICcyMDAgT0snICYmICRSZXNwb25zZXtDb250ZW50fSApIHsKICAgICAgICAgICAgJEV4dGVuZGVke09yaWdpbmFsTUQ1fSA9ICRNYWluT2JqZWN0LT5NRDVzdW0oCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFJlc3BvbnNle0NvbnRlbnR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkRXh0ZW5kZWR7TUQ1fSBuZSAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ICkgewogICAgICAgICAgICAgICAgJE1haW5PYmplY3QtPlJlcXVpcmUoJ1RleHQ6OkRpZmY6OkZvcm1hdHRlZEhUTUwnKTsKICAgICAgICAgICAgICAgICRFeHRlbmRlZHtEaWZmfSA9IGRpZmZfc3RyaW5ncyggJHsgJFJlc3BvbnNle0NvbnRlbnR9IH0sICQkQ29udGVudCApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVFeHRlbmRlZCwKICAgICk7CgogICAgcmV0dXJuICVFeHRlbmRlZDsKfQoKc3ViIF9Jc1pudW55RmlsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIHJldHVybiBpZiAhSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte0ZpbGV9ICk7CgogICAgbXkgJEFic29sdXRlRmlsZVBhdGggPSBhYnNfcGF0aCggJFBhcmFte0ZpbGV9ICk7CgogICAgbXkgJEhvbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKTsKCiAgICByZXR1cm4gaWYgJEFic29sdXRlRmlsZVBhdGggIX4gbXtcQVxRJEhvbWVcRX07CgogICAgcmV0dXJuIDE7Cn0KCjE7CgAAAAAAAAAAz1oAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADVAQAAAAAAAOIBAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					297,
-					1,
-					"revert",
-					null,
-					"AwAAAAAAAAAAAAAAAAAAAAAAAADPWgAAIyAtLQojIENvcHlyaWdodCAoQykgMjAyMSBabnVueSBHbWJILCBodHRwczovL3pudW55Lm9yZy8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pblN5c3RlbUZpbGVzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpXZWJVc2VyQWdlbnQ7CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBUZXh0OjpEaWZmOjpGb3JtYXR0ZWRIVE1MOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBGaWxlOjpzdGF0OwoKdXNlIEN3ZCAnYWJzX3BhdGgnOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpQYWNrYWdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3VwcG9ydEJ1bmRsZUdlbmVyYXRvcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpbWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnQWRtaW5TeXN0ZW1GaWxlcyc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQ7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ2FjaGVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICBteSAkVGltZU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKCiAgICBteSBAUGFyYW1OYW1lcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW1OYW1lcygpOwoKICAgIGZvciBteSAkVmFsdWUgKEBQYXJhbU5hbWVzKSB7CiAgICAgICAgJFBhcmFteyRWYWx1ZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkVmFsdWUgKSB8fCAnJzsKICAgIH0KCiAgICAkUGFyYW17Q2FjaGVEYXRlfSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0NhY2hlRGF0ZScsCiAgICApOwoKICAgIGlmICggISRQYXJhbXtDYWNoZURhdGV9ICkgewogICAgICAgICRQYXJhbXtDYWNoZURhdGV9ID0gJFRpbWVPYmplY3QtPkN1cnJlbnRUaW1lc3RhbXAoKTsKICAgICAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0NhY2hlRGF0ZScsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtDYWNoZURhdGV9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJElzWm51bnlGaWxlID0gJFNlbGYtPl9Jc1pudW55RmlsZSgKICAgICAgICBGaWxlID0+ICRQYXJhbXtGaWxlfQogICAgKTsKCiAgICBpZiAoICRQYXJhbXtGaWxlfSAmJiAhJElzWm51bnlGaWxlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0ZpbGUgbm90IGZvdW5kLicpLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0ZpbGV9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTaWRlYmFyJywKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWx0ZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbQogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QWRkSlNPbkRvY3VtZW50Q29tcGxldGVJZk5vdEV4aXN0cygKICAgICAgICBLZXkgID0+ICdBZG1pblN5c3RlbUZpbGVzLkluaXRUYWJsZUZpbHRlcicsCiAgICAgICAgQ29kZSA9PiAnCiAgICAgICAgICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQoIiNGaWx0ZXJGaWxlcyIpLCAkKCIuRmlsZXMiKSwyLDEpOwogICAgICAgICAgICAkKCIjRmlsdGVyRmlsZXMiKS5mb2N1cygpOwogICAgICAgICcsCiAgICApOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDYWNoZURlbGV0ZScgKSB7CgogICAgICAgICMgZGVsZXRlIGNhY2hlCiAgICAgICAgJENhY2hlT2JqZWN0LT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IgogICAgICAgICk7CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU3lzdGVtRmlsZXMnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9CiAgICApOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdWaWV3RmlsZScgKSB7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X1ZpZXdGaWxlKCVQYXJhbSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fU2hvd092ZXJ2aWV3KCk7CiAgICB9CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9TaG93T3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRPdXRwdXQ7CiAgICBteSBARmlsZXMgPSAkU2VsZi0+R2V0RmlsZXMoKTsKCiAgICBmb3IgbXkgJFdpZGdldCAocXcoQ3VzdG9tIENoYW5nZWQgUGFja2FnZSkpIHsKICAgICAgICBteSBARmlsZXMgPSBncmVwIHsgJFdpZGdldCBlcSAkXy0+e1R5cGV9IH0gQEZpbGVzOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fU2hvd0ZpbGVzV2lkZ2V0KAogICAgICAgICAgICBGaWxlcyAgPT4gXEBGaWxlcywKICAgICAgICAgICAgV2lkZ2V0ID0+ICRXaWRnZXQsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9WaWV3RmlsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkTG9nT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwogICAgbXkgJE1haW5PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgTkVFREVEOgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpbGUpKSB7CgogICAgICAgIG5leHQgTkVFREVEIGlmIGRlZmluZWQgJFBhcmFteyROZWVkZWR9OwogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlBhcmFtZXRlciAnJE5lZWRlZCcgaXMgbmVlZGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFNlbGYtPlBhY2thZ2VGaWxlcyggQ2FjaGUgPT4gMCApOwoKICAgIG15ICRDb250ZW50ID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgIExvY2F0aW9uID0+ICRQYXJhbXtGaWxlfSwKICAgICk7CgogICAgbXkgJUZpbGVEZXRhaWxzID0gJFNlbGYtPkZpbGVEZXRhaWxzKAogICAgICAgIEZpbGUgICAgID0+ICRQYXJhbXtGaWxlfSwKICAgICAgICBUeXBlICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgRXh0ZW5kZWQgPT4gMSwKICAgICk7CgogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKHF3KE5hbWUgUGF0aCBGdWxsUGF0aCBVc2VyIEdyb3VwIENyZWF0ZWQgQ2hhbmdlZCAgKSkgewogICAgICAgIG5leHQgS0VZIGlmICEkRmlsZURldGFpbHN7JEtleX07CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWxlRGV0YWlscycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWxlRGV0YWlsc3skS2V5fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKHF3KFR5cGUgUGFja2FnZSBTdGF0ZSBTdGF0ZU1lc3NhZ2UgUGVybWlzc2lvbnMgTUQ1IE9yaWdpbmFsTUQ1KSkgewogICAgICAgIG5leHQgS0VZIGlmICEkRmlsZURldGFpbHN7JEtleX07CiAgICAgICAgaWYgKCAkS2V5IGVxICdUeXBlJyApIHsKICAgICAgICAgICAgJEZpbGVEZXRhaWxzeyRLZXl9ID0gJFNlbGYtPntGaWxlc30tPnsgJEZpbGVEZXRhaWxze0Z1bGxQYXRofSB9LT57VHlwZX0gfHwgJEZpbGVEZXRhaWxzeyRLZXl9OwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRmlsZURldGFpbHNFeHRlbmRlZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWxlRGV0YWlsc3skS2V5fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJEZpbGVEZXRhaWxze0RpZmZ9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdGaWxlRGlmZicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRmlsZSAgICA9PiAkRmlsZURldGFpbHN7TmFtZX0sCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRGaWxlRGV0YWlsc3tEaWZmfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblN5c3RlbUZpbGVzL0ZpbGUnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIEZpbGUgICAgPT4gJEZpbGVEZXRhaWxze05hbWV9LAogICAgICAgICAgICBDb250ZW50ID0+ICRDb250ZW50ID8gJHskQ29udGVudH0gOiAnJywKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9TaG93RmlsZXNXaWRnZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExhbmd1YWdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpOwoKICAgIG15IEBGaWxlcyA9IEB7ICRQYXJhbXtGaWxlc30gfTsKCiAgICBpZiAoICRQYXJhbXtXaWRnZXR9IGVxICdQYWNrYWdlJyApIHsKCiAgICAgICAgIyBmb3IgZWFjaCBwYWNrYWdlIGdlbmVyYXRlIG93biB3aWRnZXQKICAgICAgICBteSAlUGFja2FnZXMgPSBtYXAgeyAkXy0+e1BhY2thZ2V9ID0+IDEgfSBARmlsZXM7CgogICAgICAgIGZvciBteSAkUGFja2FnZSAoIHNvcnQga2V5cyAlUGFja2FnZXMgKSB7CiAgICAgICAgICAgIG15IEBGaWxlcyA9IGdyZXAgeyAkUGFja2FnZSBlcSAkXy0+e1BhY2thZ2V9IH0gQEZpbGVzOwoKICAgICAgICAgICAgbXkgJFRyYW5zbGF0ZWRXaWRnZXROYW1lID0gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoICdQYWNrYWdlIGZpbGVzIC0gJXMnLCAkUGFja2FnZSApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdXaWRnZXQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICRUcmFuc2xhdGVkV2lkZ2V0TmFtZSwKICAgICAgICAgICAgICAgICAgICBXaWRnZXQgPT4gJFBhcmFte1dpZGdldH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRGaWxlIChARmlsZXMpIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZpbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgPT4gJFBhcmFte1dpZGdldH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbGV9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgbXkgJEhpbnQ7CiAgICAgICAgaWYgKCAkUGFyYW17V2lkZ2V0fSBlcSAnQ2hhbmdlZCcgKSB7CiAgICAgICAgICAgICRIaW50ID0gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnKEZpbGVzIHdoZXJlIG9ubHkgdGhlIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBjaGFuZ2VkIHdpbGwgbm90IGJlIGRpc3BsYXllZC4pJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnV2lkZ2V0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gJFBhcmFte1dpZGdldH0gLiAnIGZpbGVzJywKICAgICAgICAgICAgICAgIEhpbnQgICA9PiAkSGludCwKICAgICAgICAgICAgICAgIFdpZGdldCA9PiAkUGFyYW17V2lkZ2V0fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJEZpbGUgKEBGaWxlcykgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkU2VsZi0+e0ZpbGVzfS0+eyAkRmlsZS0+e0Z1bGxQYXRofSB9LT57UGFja2FnZX0KICAgICAgICAgICAgICAgICYmICRTZWxmLT57RmlsZXN9LT57ICRGaWxlLT57RnVsbFBhdGh9IH0tPntTdGF0ZX0gbmUgJ09LJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRmlsZS0+e1R5cGV9ID0gJ1BhY2thZ2UnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZpbGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgV2lkZ2V0ID0+ICRQYXJhbXtXaWRnZXR9LAogICAgICAgICAgICAgICAgICAgICV7JEZpbGV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU3lzdGVtRmlsZXMvV2lkZ2V0JywKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCj1oZWFkMiBHZXRGaWxlcygpCgpyZXR1cm5zIGFsbCBjdXN0b20sIHBhY2thZ2UgYW5kIGNoYW5nZWQgZmlsZXMuCgogICAgbXkgQEZpbGVzID0gJE9iamVjdC0+R2V0RmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQEZpbGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgJ1N0YXRlTWVzc2FnZScgPT4gJ09LJywKICAgICAgICAgICAgJ1BhdGgnICAgICAgICAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML0N1c3RvbS54bWwnLAogICAgICAgICAgICAnVHlwZScgICAgICAgICA9PiAnUGFja2FnZScsCiAgICAgICAgICAgICdHcm91cCcgICAgICAgID0+ICd3d3ctZGF0YScsCiAgICAgICAgICAgICdVc2VyJyAgICAgICAgID0+ICdzdGFmZicsCiAgICAgICAgICAgICdOYW1lJyAgICAgICAgID0+ICdDdXN0b20ueG1sJywKICAgICAgICAgICAgJ1Blcm1pc3Npb25zJyAgPT4gJzA2NjAnLAogICAgICAgICAgICAnU3RhdGUnICAgICAgICA9PiAnT0snLAogICAgICAgICAgICAnUGFja2FnZScgICAgICA9PiAnQ3VzdG9tJywKICAgICAgICAgICAgJ0Z1bGxQYXRoJyAgICAgPT4gJy93b3Jrc3BhY2Uvb3Rycy9vdHJzXzYwTmV3L0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML0N1c3RvbS54bWwnLAogICAgICAgICAgICAnQ3JlYXRlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycsCiAgICAgICAgICAgICdDaGFuZ2VkJyAgICAgID0+ICcyMDE5LTEwLTI4IDA5OjM2OjAzJwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAnU3RhdGVNZXNzYWdlJyA9PiAnT0snLAogICAgICAgICAgICAnUGF0aCcgICAgICAgICA9PiAnQ3VzdG9tL0tlcm5lbC9TeXN0ZW0vVGlja2V0LnBtJywKICAgICAgICAgICAgJ1R5cGUnICAgICAgICAgPT4gJ0N1c3RvbScsCiAgICAgICAgICAgICdHcm91cCcgICAgICAgID0+ICd3d3ctZGF0YScsCiAgICAgICAgICAgICdVc2VyJyAgICAgICAgID0+ICdzdGFmZicsCiAgICAgICAgICAgICdOYW1lJyAgICAgICAgID0+ICdUaWNrZXQucG0nLAogICAgICAgICAgICAnUGVybWlzc2lvbnMnICA9PiAnMDY2MCcsCiAgICAgICAgICAgICdTdGF0ZScgICAgICAgID0+ICdPSycsCiAgICAgICAgICAgICdGdWxsUGF0aCcgICAgID0+ICcvd29ya3NwYWNlL290cnMvb3Ryc182ME5ldy9DdXN0b20vS2VybmVsL1N5c3RlbS9UaWNrZXQucG0nLAogICAgICAgICAgICAnQ3JlYXRlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycsCiAgICAgICAgICAgICdDaGFuZ2VkJyAgICAgID0+ICcyMDE5LTEwLTI4IDA5OjM2OjAzJwogICAgICAgIH0sCiAgICAgICAgLi4uCiAgICApOwoKPWN1dAoKc3ViIEdldEZpbGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQEZpbGVzOwogICAgcHVzaCBARmlsZXMsICRTZWxmLT5QYWNrYWdlRmlsZXMoKTsKICAgIHB1c2ggQEZpbGVzLCAkU2VsZi0+Q3VzdG9tRmlsZXMoKTsKICAgIHB1c2ggQEZpbGVzLCAkU2VsZi0+Q2hhbmdlZEZpbGVzKCk7CgogICAgcmV0dXJuIEBGaWxlczsKfQoKPWhlYWQyIFBhY2thZ2VGaWxlcygpCgpyZXR1cm5zIGFsbCBwYWNrYWdlIGZpbGVzLgoKICAgIG15IEBQYWNrYWdlRmlsZXMgPSAkT2JqZWN0LT5QYWNrYWdlRmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQFBhY2thZ2VGaWxlcyA9ICgKICAgICAgICB7CiAgICAgICAgICAgICdTdGF0ZU1lc3NhZ2UnID0+ICdPSycsCiAgICAgICAgICAgICdQYXRoJyAgICAgICAgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9DdXN0b20ueG1sJywKICAgICAgICAgICAgJ1R5cGUnICAgICAgICAgPT4gJ1BhY2thZ2UnLAogICAgICAgICAgICAnR3JvdXAnICAgICAgICA9PiAnd3d3LWRhdGEnLAogICAgICAgICAgICAnVXNlcicgICAgICAgICA9PiAnc3RhZmYnLAogICAgICAgICAgICAnTmFtZScgICAgICAgICA9PiAnQ3VzdG9tLnhtbCcsCiAgICAgICAgICAgICdQZXJtaXNzaW9ucycgID0+ICcwNjYwJywKICAgICAgICAgICAgJ1N0YXRlJyAgICAgICAgPT4gJ09LJywKICAgICAgICAgICAgJ1BhY2thZ2UnICAgICAgPT4gJ0N1c3RvbScsCiAgICAgICAgICAgICdGdWxsUGF0aCcgICAgID0+ICcvd29ya3NwYWNlL290cnMvb3Ryc182ME5ldy9LZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9DdXN0b20ueG1sJywKICAgICAgICAgICAgJ0NyZWF0ZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnLAogICAgICAgICAgICAnQ2hhbmdlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycKICAgICAgICB9LAogICAgICAgIC4uLgogICAgKTsKCj1jdXQKCnN1YiBQYWNrYWdlRmlsZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFja2FnZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQYWNrYWdlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkQ2FjaGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRDYWNoZUtleSA9ICdQYWNrYWdlRmlsZXMnOwogICAgbXkgJENhY2hlICAgID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgICRQYXJhbXtDYWNoZX0gLy89IDE7CiAgICByZXR1cm4gQHskQ2FjaGV9IGlmIElzQXJyYXlSZWZXaXRoRGF0YSgkQ2FjaGUpICYmICRQYXJhbXtDYWNoZX07CgogICAgbXkgJEhvbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKTsKCiAgICBteSBAUmVwb3NpdG9yeUxpc3QgPSAkUGFja2FnZU9iamVjdC0+UmVwb3NpdG9yeUxpc3QoCiAgICAgICAgUmVzdWx0ID0+ICdzaG9ydCcsCiAgICApOwoKICAgIG15IEBQYWNrYWdlRmlsZXM7CiAgICBmb3IgbXkgJFJlcG9zaXRvcnkgKEBSZXBvc2l0b3J5TGlzdCkgewoKICAgICAgICAjIGRlcGxveSBjaGVjawogICAgICAgIG15ICREZXBsb3llZCA9ICRQYWNrYWdlT2JqZWN0LT5EZXBsb3lDaGVjaygKICAgICAgICAgICAgJXskUmVwb3NpdG9yeX0sCiAgICAgICAgICAgIExvZyA9PiAwLAogICAgICAgICk7CiAgICAgICAgbXkgJURlcGxveUluZm8gPSAkUGFja2FnZU9iamVjdC0+RGVwbG95Q2hlY2tJbmZvKCk7CgogICAgICAgIG15ICRQYWNrYWdlRmlsZSA9ICRQYWNrYWdlT2JqZWN0LT5QYWNrYWdlRmlsZUdldE1ENVN1bSgKICAgICAgICAgICAgJXskUmVwb3NpdG9yeX0sCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRGaWxlICggc29ydCBrZXlzICV7JFBhY2thZ2VGaWxlfSApIHsKICAgICAgICAgICAgJEZpbGUgPX4gc3tcL1wvfXsvfXNteGc7CiAgICAgICAgICAgIG15ICRSZWxhdGl2UGF0aCA9ICRGaWxlOwogICAgICAgICAgICAkUmVsYXRpdlBhdGggPX4gc3skSG9tZVwvfXt9c214ZzsKCiAgICAgICAgICAgIG15ICVGaWxlRGV0YWlscyA9ICRTZWxmLT5GaWxlRGV0YWlscygKICAgICAgICAgICAgICAgIEZpbGUgPT4gJEZpbGUsCiAgICAgICAgICAgICAgICBUeXBlID0+ICdQYWNrYWdlJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRGaWxlRGV0YWlsc3tQYWNrYWdlfSAgICAgID0gJFJlcG9zaXRvcnktPntOYW1lfTsKICAgICAgICAgICAgJEZpbGVEZXRhaWxze1N0YXRlfSAgICAgICAgPSAnT0snOwogICAgICAgICAgICAkRmlsZURldGFpbHN7U3RhdGVNZXNzYWdlfSA9ICdPSyc7CiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICREZXBsb3lJbmZve0ZpbGV9ICkgJiYgJERlcGxveUluZm97RmlsZX0tPnskUmVsYXRpdlBhdGh9ICkgewogICAgICAgICAgICAgICAgJEZpbGVEZXRhaWxze1N0YXRlfSAgICAgICAgPSAnUHJvYmxlbSc7CiAgICAgICAgICAgICAgICAkRmlsZURldGFpbHN7U3RhdGVNZXNzYWdlfSA9ICdGaWxlIGlzIGRpZmZlcmVudCEnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfSA9IFwlRmlsZURldGFpbHM7CgogICAgICAgICAgICBwdXNoIEBQYWNrYWdlRmlsZXMsIHsKICAgICAgICAgICAgICAgICVGaWxlRGV0YWlscywKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQFBhY2thZ2VGaWxlcywKICAgICk7CgogICAgcmV0dXJuIEBQYWNrYWdlRmlsZXM7Cn0KCj1oZWFkMiBDdXN0b21GaWxlcygpCgpyZXR1cm5zIGFsbCBjdXN0b20gZmlsZXMuCgogICAgbXkgQEN1c3RvbUZpbGVzID0gJE9iamVjdC0+Q3VzdG9tRmlsZXMoKTsKClJldHVybnM6CgogICAgbXkgQEN1c3RvbUZpbGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgJ1N0YXRlTWVzc2FnZScgPT4gJ09LJywKICAgICAgICAgICAgJ1BhdGgnICAgICAgICAgPT4gJ0N1c3RvbS9LZXJuZWwvU3lzdGVtL1RpY2tldC5wbScsCiAgICAgICAgICAgICdUeXBlJyAgICAgICAgID0+ICdDdXN0b20nLAogICAgICAgICAgICAnR3JvdXAnICAgICAgICA9PiAnd3d3LWRhdGEnLAogICAgICAgICAgICAnVXNlcicgICAgICAgICA9PiAnc3RhZmYnLAogICAgICAgICAgICAnTmFtZScgICAgICAgICA9PiAnVGlja2V0LnBtJywKICAgICAgICAgICAgJ1Blcm1pc3Npb25zJyAgPT4gJzA2NjAnLAogICAgICAgICAgICAnU3RhdGUnICAgICAgICA9PiAnT0snLAogICAgICAgICAgICAnRnVsbFBhdGgnICAgICA9PiAnL3dvcmtzcGFjZS9vdHJzL290cnNfNjBOZXcvQ3VzdG9tL0tlcm5lbC9TeXN0ZW0vVGlja2V0LnBtJywKICAgICAgICAgICAgJ0NyZWF0ZWQnICAgICAgPT4gJzIwMTktMTAtMjggMDk6MzY6MDMnLAogICAgICAgICAgICAnQ2hhbmdlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycKICAgICAgICB9LAogICAgICAgIC4uLgogICAgKTsKCj1jdXQKCnN1YiBDdXN0b21GaWxlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRNYWluT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkVGltZU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKICAgIG15ICRDYWNoZU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICBteSAkQ2FjaGVLZXkgPSAnQ3VzdG9tRmlsZXMnOwogICAgbXkgJENhY2hlICAgID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgIHJldHVybiBAeyRDYWNoZX0gaWYgSXNBcnJheVJlZldpdGhEYXRhKCRDYWNoZSk7CgogICAgbXkgJEhvbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKTsKCiAgICBteSBARmlsZXMgPSAkTWFpbk9iamVjdC0+RGlyZWN0b3J5UmVhZCgKICAgICAgICBEaXJlY3RvcnkgPT4gJEhvbWUgLiAnL0N1c3RvbS8nLAogICAgICAgIEZpbHRlciAgICA9PiAnKi4qJywKICAgICAgICBSZWN1cnNpdmUgPT4gMSwKICAgICk7CgogICAgbXkgQEN1c3RvbUZpbGVzOwogICAgZm9yIG15ICRGaWxlIChARmlsZXMpIHsKICAgICAgICAkRmlsZSA9fiBze1wvXC99ey99c214ZzsKICAgICAgICBteSAlRmlsZURldGFpbHMgPSAkU2VsZi0+RmlsZURldGFpbHMoCiAgICAgICAgICAgIEZpbGUgPT4gJEZpbGUsCiAgICAgICAgICAgIFR5cGUgPT4gJ0N1c3RvbScsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntGaWxlc30tPnskRmlsZX0gPSBcJUZpbGVEZXRhaWxzOwoKICAgICAgICBwdXNoIEBDdXN0b21GaWxlcywgXCVGaWxlRGV0YWlsczsKICAgIH0KCiAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxAQ3VzdG9tRmlsZXMsCiAgICApOwoKICAgIHJldHVybiBAQ3VzdG9tRmlsZXM7Cn0KCj1oZWFkMiBDaGFuZ2VkRmlsZXMoKQoKcmV0dXJucyBhbGwgY2hhbmdlZCBmaWxlcy4KCiAgICBteSBAQ2hhbmdlZEZpbGVzID0gJE9iamVjdC0+Q2hhbmdlZEZpbGVzKCk7CgpSZXR1cm5zOgoKICAgIG15IEBDaGFuZ2VkRmlsZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICAnU3RhdGVNZXNzYWdlJyA9PiAnT0snLAogICAgICAgICAgICAnUGF0aCcgICAgICAgICA9PiAnS2VybmVsL0NvbmZpZy5wbScsCiAgICAgICAgICAgICdUeXBlJyAgICAgICAgID0+ICdDaGFuZ2VkJywKICAgICAgICAgICAgJ0dyb3VwJyAgICAgICAgPT4gJ3d3dy1kYXRhJywKICAgICAgICAgICAgJ1VzZXInICAgICAgICAgPT4gJ3N0YWZmJywKICAgICAgICAgICAgJ05hbWUnICAgICAgICAgPT4gJ1RpY2tldC5wbScsCiAgICAgICAgICAgICdQZXJtaXNzaW9ucycgID0+ICcwNjYwJywKICAgICAgICAgICAgJ1N0YXRlJyAgICAgICAgPT4gJ09LJywKICAgICAgICAgICAgJ0Z1bGxQYXRoJyAgICAgPT4gJy93b3Jrc3BhY2Uvb3Rycy9vdHJzXzYwTmV3L0tlcm5lbC9Db25maWcucG0nLAogICAgICAgICAgICAnQ3JlYXRlZCcgICAgICA9PiAnMjAxOS0xMC0yOCAwOTozNjowMycsCiAgICAgICAgICAgICdDaGFuZ2VkJyAgICAgID0+ICcyMDE5LTEwLTI4IDA5OjM2OjAzJwogICAgICAgIH0sCiAgICAgICAgLi4uCiAgICApOwoKPWN1dAoKc3ViIENoYW5nZWRGaWxlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRNYWluT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkQ2FjaGVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgbXkgJENhY2hlS2V5ID0gJ0NoYW5nZWRGaWxlcyc7CiAgICBteSAkQ2FjaGUgICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gQHskQ2FjaGV9IGlmIElzQXJyYXlSZWZXaXRoRGF0YSgkQ2FjaGUpOwoKICAgIG15ICRTdXBwb3J0QnVuZGxlR2VuZXJhdG9yT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN1cHBvcnRCdW5kbGVHZW5lcmF0b3InKTsKCiAgICBteSBAQ2hhbmdlZEZpbGVzOwoKICAgIG15ICRIb21lID0gJENvbmZpZ09iamVjdC0+R2V0KCdIb21lJyk7CgogICAgJFN1cHBvcnRCdW5kbGVHZW5lcmF0b3JPYmplY3QtPntNRDVTdW1Mb29rdXB9ID0gJFN1cHBvcnRCdW5kbGVHZW5lcmF0b3JPYmplY3QtPl9HZXRNRDVTdW1Mb29rdXAoKTsKICAgIG15IEBMaXN0ID0gJFN1cHBvcnRCdW5kbGVHZW5lcmF0b3JPYmplY3QtPl9HZXRDdXN0b21GaWxlTGlzdCggRGlyZWN0b3J5ID0+ICRIb21lICk7CgogICAgQ0hBTkdFREZJTEU6CiAgICBmb3IgbXkgJEZpbGUgKEBMaXN0KSB7CiAgICAgICAgbmV4dCBDSEFOR0VERklMRSBpZiAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfSAmJiAkU2VsZi0+e0ZpbGVzfS0+eyRGaWxlfS0+e1R5cGV9IGVxICdQYWNrYWdlJzsKICAgICAgICBuZXh0IENIQU5HRURGSUxFIGlmICRTZWxmLT57RmlsZXN9LT57JEZpbGV9ICYmICRTZWxmLT57RmlsZXN9LT57JEZpbGV9LT57VHlwZX0gZXEgJ0N1c3RvbSc7CgogICAgICAgICRGaWxlID1+IHN7XC9cL317L31zbXhnOwogICAgICAgIG15ICVGaWxlRGV0YWlscyA9ICRTZWxmLT5GaWxlRGV0YWlscygKICAgICAgICAgICAgRmlsZSA9PiAkRmlsZSwKICAgICAgICAgICAgVHlwZSA9PiAnQ2hhbmdlZCcsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntGaWxlc30tPnskRmlsZX0gPSBcJUZpbGVEZXRhaWxzOwoKICAgICAgICBwdXNoIEBDaGFuZ2VkRmlsZXMsIFwlRmlsZURldGFpbHM7CgogICAgfQoKICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBDaGFuZ2VkRmlsZXMsCiAgICApOwoKICAgIHJldHVybiBAQ2hhbmdlZEZpbGVzOwp9CgpzdWIgRmlsZURldGFpbHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRUaW1lT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwogICAgbXkgJE1haW5PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgbXkgJEhvbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKTsKICAgIG15ICRGaWxlID0gJFBhcmFte0ZpbGV9OwoKICAgIG15ICRTdGF0ICAgICAgICA9IHN0YXQoJEZpbGUpOwogICAgbXkgJENoYW5nZWQgICAgID0gJFN0YXQgPyAkU3RhdC0+bXRpbWUoKSA6ICcnOwogICAgbXkgJENyZWF0ZWQgICAgID0gJFN0YXQgPyAkU3RhdC0+Y3RpbWUoKSA6ICcnOwogICAgbXkgJE1vZGUgICAgICAgID0gJFN0YXQgPyAkU3RhdC0+bW9kZSgpIDogJyc7CiAgICBteSAkUGVybWlzc2lvbnMgPSAkU3RhdCA/ICggc3ByaW50ZiAnJTA0bycsICRNb2RlICYgMDc3NzcgKSA6ICcnOyAgICAjIyBubyBjcml0aWMKICAgIG15ICRVc2VyICAgICAgICA9ICRTdGF0ID8gZ2V0Z3JnaWQoICRTdGF0LT5naWQgKSA6ICcnOyAgICAgICAgICAgICAgICMjIG5vIGNyaXRpYwogICAgbXkgJEdyb3VwICAgICAgID0gJFN0YXQgPyBnZXRwd3VpZCggJFN0YXQtPnVpZCApIDogJyc7ICAgICAgICAgICAgICAgIyMgbm8gY3JpdGljCiAgICBteSAkRnVsbFBhdGggICAgPSAkRmlsZTsKICAgIG15ICRGaWxlTmFtZSAgICA9ICRGaWxlOwoKICAgICRGaWxlTmFtZSA9fiBzey4rXC8oLiopfXskMX1zbXhnOwogICAgJEZpbGUgICAgID1+IHN7JEhvbWVcL317fXNteGc7CgogICAgbXkgJENoYW5nZWRUaW1lU3RhbXAgPSAkU3RhdAogICAgICAgID8gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJENoYW5nZWQsCiAgICAgICAgKQogICAgICAgIDogJyc7CgogICAgbXkgJENyZWF0ZWRUaW1lU3RhbXAgPSAkU3RhdAogICAgICAgID8gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJENyZWF0ZWQsCiAgICAgICAgKQogICAgICAgIDogJyc7CgogICAgbXkgJUZpbGVEZXRhaWxzID0gKAogICAgICAgIFR5cGUgICAgICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgRnVsbFBhdGggICAgID0+ICRGdWxsUGF0aCwKICAgICAgICBQYXRoICAgICAgICAgPT4gJEZpbGUsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRGaWxlTmFtZSwKICAgICAgICBDaGFuZ2VkICAgICAgPT4gJENoYW5nZWRUaW1lU3RhbXAsCiAgICAgICAgQ3JlYXRlZCAgICAgID0+ICRDcmVhdGVkVGltZVN0YW1wLAogICAgICAgIFVzZXIgICAgICAgICA9PiAkVXNlciwKICAgICAgICBHcm91cCAgICAgICAgPT4gJEdyb3VwLAogICAgICAgIFBlcm1pc3Npb25zICA9PiAkUGVybWlzc2lvbnMsCiAgICAgICAgUGFja2FnZSAgICAgID0+ICRTZWxmLT57RmlsZXN9LT57JEZ1bGxQYXRofS0+e1BhY2thZ2V9IHx8ICcnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAkU3RhdCA/ICggJFNlbGYtPntGaWxlc30tPnskRnVsbFBhdGh9LT57U3RhdGV9IHx8ICdXYXJuaW5nJyApIDogJ01pc3Npbmcgb3Igbm90IHJlYWRhYmxlJywKICAgICAgICBTdGF0ZU1lc3NhZ2UgPT4gJFNlbGYtPntGaWxlc30tPnskRnVsbFBhdGh9LT57U3RhdGVNZXNzYWdlfSB8fCAnVW5rbm93bicsCiAgICApOwoKICAgIHJldHVybiAlRmlsZURldGFpbHMgaWYgISRQYXJhbXtFeHRlbmRlZH0gfHwgISRTdGF0OwoKICAgIG15ICVFeHRlbmRlZCA9ICRTZWxmLT5GaWxlRGV0YWlsc0V4dGVuZGVkKAogICAgICAgICVQYXJhbSwKICAgICAgICAlRmlsZURldGFpbHMsCiAgICApOwogICAgJUZpbGVEZXRhaWxzID0gKAogICAgICAgICVGaWxlRGV0YWlscywKICAgICAgICAlRXh0ZW5kZWQKICAgICk7CgogICAgcmV0dXJuICVGaWxlRGV0YWlsczsKfQoKc3ViIEZpbGVEZXRhaWxzRXh0ZW5kZWQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTWFpbk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CiAgICBteSAkUGFja2FnZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQYWNrYWdlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkQ2FjaGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgIG15ICRDYWNoZUtleSA9ICdGaWxlRGV0YWlsc0V4dGVuZGVkOjonIC4gJFBhcmFte0Z1bGxQYXRofTsKICAgIG15ICRDYWNoZSAgICA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICAjICAgICByZXR1cm4gJXskQ2FjaGV9IGlmIElzSGFzaFJlZldpdGhEYXRhKCRDYWNoZSk7CgogICAgbXkgJUV4dGVuZGVkOwoKICAgIG15ICRDb250ZW50ID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgIExvY2F0aW9uID0+ICRQYXJhbXtGdWxsUGF0aH0sCiAgICApOwoKICAgICRFeHRlbmRlZHtNRDV9ID0gJE1haW5PYmplY3QtPk1ENXN1bSgKICAgICAgICBTdHJpbmcgPT4gJENvbnRlbnQsCiAgICApOwoKICAgIG15ICRPcmlnaW5hbFBhdGggPSAkUGFyYW17RnVsbFBhdGh9OwoKICAgICRQYXJhbXtUeXBlfSAvLz0gJ1BhY2thZ2UnOwoKICAgIGlmICggJFBhcmFte1R5cGV9IGVxICdQYWNrYWdlJyApIHsKCiAgICAgICAgbXkgQFJlcG9zaXRvcnlMaXN0ID0gJFBhY2thZ2VPYmplY3QtPlJlcG9zaXRvcnlMaXN0KAoKICAgICAgICAgICAgIyB3aWxsIG9ubHkgcmV0dXJuIG5hbWUsIHZlcnNpb24sIGluc3RhbGxfc3RhdHVzIG1kNXN1bSBhbmQgdmVuZG9yaW5zdGVhZCBvZiB0aGUgc3RydWN0dXJlCiAgICAgICAgICAgIFJlc3VsdCA9PiAnc2hvcnQnLAogICAgICAgICk7CgogICAgICAgIG15ICVSZXBvc2l0b3J5ID0gbWFwIHsgJF8tPntOYW1lfSA9PiAkXy0+e1ZlcnNpb259IH0gQFJlcG9zaXRvcnlMaXN0OwoKICAgICAgICBteSAkUGFja2FnZSA9ICRQYWNrYWdlT2JqZWN0LT5SZXBvc2l0b3J5R2V0KAogICAgICAgICAgICBOYW1lICAgID0+ICRQYXJhbXtQYWNrYWdlfSwKICAgICAgICAgICAgVmVyc2lvbiA9PiAkUmVwb3NpdG9yeXsgJFBhcmFte1BhY2thZ2V9IH0sCiAgICAgICAgICAgIFJlc3VsdCAgPT4gJ1NDQUxBUicsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVN0cnVjdHVyZSA9ICRQYWNrYWdlT2JqZWN0LT5QYWNrYWdlUGFyc2UoIFN0cmluZyA9PiAkUGFja2FnZSApOwoKICAgICAgICBteSAkT3JpZ2luYWxDb250ZW50ID0gJyc7CiAgICAgICAgaWYgKCByZWYgJFN0cnVjdHVyZXtGaWxlbGlzdH0gZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgZm9yIG15ICRIYXNoICggQHsgJFN0cnVjdHVyZXtGaWxlbGlzdH0gfSApIHsKICAgICAgICAgICAgICAgIGlmICggJEhhc2gtPntMb2NhdGlvbn0gZXEgJFBhcmFte1BhdGh9ICkgewogICAgICAgICAgICAgICAgICAgICRPcmlnaW5hbENvbnRlbnQgPSAkSGFzaC0+e0NvbnRlbnR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ID0gJE1haW5PYmplY3QtPk1ENXN1bSgKICAgICAgICAgICAgU3RyaW5nID0+ICRPcmlnaW5hbENvbnRlbnQsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEN1cnJlbnRDb250ZW50ID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgICAgICBMb2NhdGlvbiA9PiAkUGFyYW17RnVsbFBhdGh9LAogICAgICAgICk7CgogICAgICAgIGlmICggJEV4dGVuZGVke01ENX0gbmUgJEV4dGVuZGVke09yaWdpbmFsTUQ1fSApIHsKICAgICAgICAgICAgJE1haW5PYmplY3QtPlJlcXVpcmUoJ1RleHQ6OkRpZmY6OkZvcm1hdHRlZEhUTUwnKTsKICAgICAgICAgICAgJEV4dGVuZGVke0RpZmZ9ID0gZGlmZl9zdHJpbmdzKCAkT3JpZ2luYWxDb250ZW50LCAkJEN1cnJlbnRDb250ZW50ICk7CiAgICAgICAgfQoKICAgIH0KICAgIGVsc2lmICggJFBhcmFte1R5cGV9IGVxICdDdXN0b20nICkgewoKICAgICAgICAkT3JpZ2luYWxQYXRoID1+IHN7Q3VzdG9tXC99e31zbXhnOwoKICAgICAgICBpZiAoICEtZSAkT3JpZ2luYWxQYXRoICkgewogICAgICAgICAgICAkRXh0ZW5kZWR7U3RhdGV9ICAgICAgICA9ICdQcm9ibGVtJzsKICAgICAgICAgICAgJEV4dGVuZGVke1N0YXRlTWVzc2FnZX0gPSAnT3JpZ2luYWwgZmlsZSBub3QgZXhpc3RzLic7CiAgICAgICAgICAgICRFeHRlbmRlZHtPcmlnaW5hbE1ENX0gID0gJ09yaWdpbmFsIGZpbGUgbm90IGV4aXN0cy4nOwogICAgICAgICAgICByZXR1cm4gJUV4dGVuZGVkOwogICAgICAgIH0KCiAgICAgICAgbXkgJE9yaWdpbmFsQ29udGVudCA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICAgICAgTG9jYXRpb24gPT4gJE9yaWdpbmFsUGF0aCwKICAgICAgICApOwogICAgICAgICRFeHRlbmRlZHtPcmlnaW5hbE1ENX0gPSAkTWFpbk9iamVjdC0+TUQ1c3VtKAogICAgICAgICAgICBTdHJpbmcgPT4gJE9yaWdpbmFsQ29udGVudCwKICAgICAgICApOwoKICAgICAgICBpZiAoICRFeHRlbmRlZHtNRDV9IG5lICRFeHRlbmRlZHtPcmlnaW5hbE1ENX0gKSB7CiAgICAgICAgICAgICRNYWluT2JqZWN0LT5SZXF1aXJlKCdUZXh0OjpEaWZmOjpGb3JtYXR0ZWRIVE1MJyk7CiAgICAgICAgICAgICRFeHRlbmRlZHtEaWZmfSA9IGRpZmZfZmlsZXMoICRPcmlnaW5hbFBhdGgsICRQYXJhbXtGdWxsUGF0aH0gKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtUeXBlfSBlcSAnQ2hhbmdlZCcgKSB7CgogICAgICAgICMgZS5nLiA2LjQuMgogICAgICAgIG15ICRWZXJzaW9uID0gJENvbmZpZ09iamVjdC0+R2V0KCdWZXJzaW9uJyk7CgogICAgICAgICRWZXJzaW9uID1+IHN7XC54XHp9e31pOyAgICAgIyA2LjQueCA9PiA2LjQgKGxhdGVzdCkKICAgICAgICAkVmVyc2lvbiA9fiBze1wufXtffXNteGc7ICAgICMgNi40LjIgPT4gNl80XzIKICAgICAgICAkVmVyc2lvbiA9ICdyZWwtJyAuICRWZXJzaW9uOyAgICAjIDZfNF8yID0+IHJlbC02XzRfMgoKICAgICAgICBteSAkV2ViVXNlckFnZW50T2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OldlYlVzZXJBZ2VudC0+bmV3KAogICAgICAgICAgICBUaW1lb3V0ID0+IDE1LAogICAgICAgICk7CgogICAgICAgICMgIGUuZy46IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS96bnVueS96bnVueS9yZWwtNl81L0tlcm5lbC9HZW5lcmljSW50ZXJmYWNlL0V2ZW50L0hhbmRsZXIucG0KICAgICAgICBteSAkVVJMICAgICAgPSAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3pudW55L3pudW55LyIgLiAkVmVyc2lvbiAuICIvIiAuICRQYXJhbXtQYXRofTsKICAgICAgICBteSAlUmVzcG9uc2UgPSAkV2ViVXNlckFnZW50T2JqZWN0LT5SZXF1ZXN0KAogICAgICAgICAgICBVUkwgICA9PiAkVVJMLAogICAgICAgICAgICBOb0xvZyA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICggJFJlc3BvbnNle1N0YXR1c30gZXEgJzIwMCBPSycgJiYgJFJlc3BvbnNle0NvbnRlbnR9ICkgewogICAgICAgICAgICAkRXh0ZW5kZWR7T3JpZ2luYWxNRDV9ID0gJE1haW5PYmplY3QtPk1ENXN1bSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUmVzcG9uc2V7Q29udGVudH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICRFeHRlbmRlZHtNRDV9IG5lICRFeHRlbmRlZHtPcmlnaW5hbE1ENX0gKSB7CiAgICAgICAgICAgICAgICAkTWFpbk9iamVjdC0+UmVxdWlyZSgnVGV4dDo6RGlmZjo6Rm9ybWF0dGVkSFRNTCcpOwogICAgICAgICAgICAgICAgJEV4dGVuZGVke0RpZmZ9ID0gZGlmZl9zdHJpbmdzKCAkeyAkUmVzcG9uc2V7Q29udGVudH0gfSwgJCRDb250ZW50ICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJUV4dGVuZGVkLAogICAgKTsKCiAgICByZXR1cm4gJUV4dGVuZGVkOwp9CgpzdWIgX0lzWm51bnlGaWxlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgcmV0dXJuIGlmICFJc1N0cmluZ1dpdGhEYXRhKCAkUGFyYW17RmlsZX0gKTsKCiAgICBteSAkQWJzb2x1dGVGaWxlUGF0aCA9IGFic19wYXRoKCAkUGFyYW17RmlsZX0gKTsKCiAgICBteSAkSG9tZSA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpOwoKICAgIHJldHVybiBpZiAkQWJzb2x1dGVGaWxlUGF0aCAhfiBte1xBXFEkSG9tZVxFfTsKCiAgICByZXR1cm4gMTsKfQoKMTsKAAAAAAAAAADZWgAAAAAAAAAAAAAAAAAAAAAAAERYAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADVAQAAAAAAAOIBAAAAAAAAAAAAAAAA8L8"
-				]
-			]
-		},
-		{
-			"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/Main.pm",
-			"settings":
-			{
-				"buffer_size": 30301,
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					24,
-					1,
-					"revert",
-					null,
-					"AgAAAAAAAAAAAAAAAAAAAAAAAABddgAAIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpabnVueTo6UGVybDo6RHVtcGVyKQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46OlpudW55OjpQZXJsOjpSZXF1aXJlKQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIERpZ2VzdDo6TUQ1IHF3KG1kNV9oZXgpOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgRmlsZTo6c3RhdDsKdXNlIFVuaWNvZGU6Ok5vcm1hbGl6ZTsKdXNlIExpc3Q6OlV0aWwgcXcoKTsKdXNlIEZjbnRsIHF3KDpmbG9jayk7CnVzZSBFbmNvZGU7CnVzZSBNYXRoOjpSYW5kb206OlNlY3VyZSBxdygpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzU3RyaW5nV2l0aERhdGEpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkVuY29kZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6TWFpbiAtIG1haW4gb2JqZWN0Cgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBtYWluIGZ1bmN0aW9ucyB0byBsb2FkIG1vZHVsZXMsIGRpZSwgYW5kIGhhbmRsZSBmaWxlcy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBuZXcgb2JqZWN0LiBEbyBub3QgdXNlIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIHVzZToKCiAgICBteSAkTWFpbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJlcXVpcmUoKQoKcmVxdWlyZS9sb2FkIGEgbW9kdWxlCgogICAgbXkgJExvYWRlZCA9ICRNYWluT2JqZWN0LT5SZXF1aXJlKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RXhhbXBsZScsCiAgICAgICAgU2lsZW50ID0+IDEsICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIG5vIGxvZyBlbnRyeSBpZiBtb2R1bGUgd2FzIG5vdCBmb3VuZAogICAgKTsKCj1jdXQKCnN1YiBSZXF1aXJlIHsKICAgIG15ICggJFNlbGYsICRNb2R1bGUsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhJE1vZHVsZSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgbW9kdWxlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZXZhbCB7CiAgICAgICAgbXkgJEZpbGVOYW1lID0gJE1vZHVsZSA9fiBzezo6fXsvfXNteGdyOwogICAgICAgIHJlcXVpcmUgJEZpbGVOYW1lIC4gJy5wbSc7CiAgICB9OwoKICAgICMgSGFuZGxlIGVycm9ycy4KICAgIGlmICgkQCkgewoKICAgICAgICBpZiAoICEkUGFyYW17U2lsZW50fSApIHsKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAkQDsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBDYWxsZXIgICA9PiAxLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgUmVxdWlyZUJhc2VDbGFzcygpCgpyZXF1aXJlL2xvYWQgYSBtb2R1bGUgYW5kIGFkZCBpdCBhcyBhIGJhc2UgY2xhc3MgdG8gdGhlCmNhbGxpbmcgcGFja2FnZSwgaWYgbm90IGFscmVhZHkgcHJlc2VudCAodGhpcyBjaGVjayBpcyBuZWVkZWQKZm9yIHBlcnNpc3RlbnQgZW52aXJvbm1lbnRzKS4KCiAgICBteSAkTG9hZGVkID0gJE1haW5PYmplY3QtPlJlcXVpcmVCYXNlQ2xhc3MoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpFeGFtcGxlJywKICAgICk7Cgo9Y3V0CgpzdWIgUmVxdWlyZUJhc2VDbGFzcyB7CiAgICBteSAoICRTZWxmLCAkTW9kdWxlICkgPSBAXzsKCiAgICAjIExvYWQgdGhlIG1vZHVsZSwgaWYgbm90IGFscmVhZHkgbG9hZGVkLgogICAgcmV0dXJuIGlmICEkU2VsZi0+UmVxdWlyZSgkTW9kdWxlKTsKCiAgICBubyBzdHJpY3QgJ3JlZnMnOyAgICAjIyBubyBjcml0aWMKICAgIG15ICRDYWxsaW5nQ2xhc3MgPSBjYWxsZXIoMCk7CgogICAgIyBDaGVjayBpZiB0aGUgYmFzZSBjbGFzcyB3YXMgYWxyZWFkeSBsb2FkZWQuCiAgICAjIFRoaXMgY2FuIGhhcHBlbiBpbiBwZXJzaXN0ZW50IGVudmlyb25tZW50cyBhcyBtb2RfcGVybCAoc2VlIGJ1ZyM5Njg2KS4KICAgIGlmICggTGlzdDo6VXRpbDo6Zmlyc3QgeyAkXyBlcSAkTW9kdWxlIH0gQHsiJHtDYWxsaW5nQ2xhc3N9OjpJU0EifSApIHsKICAgICAgICByZXR1cm4gMTsgICAgIyBub3RoaW5nIHRvIGRvIG5vdwogICAgfQoKICAgIHB1c2ggQHsiJHtDYWxsaW5nQ2xhc3N9OjpJU0EifSwgJE1vZHVsZTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIERpZSgpCgp0byBkaWUKCiAgICAkTWFpbk9iamVjdC0+RGllKCdzb21lIG1lc3NhZ2UgdG8gZGllJyk7Cgo9Y3V0CgpzdWIgRGllIHsKICAgIG15ICggJFNlbGYsICRNZXNzYWdlICkgPSBAXzsKCiAgICAkTWVzc2FnZSA9ICRNZXNzYWdlIHx8ICdEaWVkISc7CgogICAgIyBsb2cgbWVzc2FnZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgQ2FsbGVyICAgPT4gMSwKICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgKTsKCiAgICBleGl0Owp9Cgo9aGVhZDIgRmlsZW5hbWVDbGVhblVwKCkKCnRvIGNsZWFuIHVwIGZpbGVuYW1lcyB3aGljaCBjYW4gYmUgdXNlZCBpbiBhbnkgY2FzZSAoYWxzbyBxdW90aW5nIGlzIGRvbmUpCgogICAgbXkgJEZpbGVuYW1lID0gJE1haW5PYmplY3QtPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICBGaWxlbmFtZSA9PiAnbWVfdG8vYWxhbC54bWwnLAogICAgICAgIFR5cGUgICAgID0+ICdMb2NhbCcsICAgICAgICAgICAgIyBMb2NhbHxBdHRhY2htZW50fE1ENQogICAgKTsKCiAgICBteSAkRmlsZW5hbWUgPSAkTWFpbk9iamVjdC0+RmlsZW5hbWVDbGVhblVwKAogICAgICAgIEZpbGVuYW1lID0+ICdzb21lOmZpbGUueG1sJywKICAgICAgICBUeXBlICAgICA9PiAnTUQ1JywgICAgICAgICAgICAgICMgTG9jYWx8QXR0YWNobWVudHxNRDUKICAgICk7Cgo9Y3V0CgpzdWIgRmlsZW5hbWVDbGVhblVwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte0ZpbGVuYW1lfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBGaWxlbmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZXNjYXBlIGlmIGNsZWFudXAgaXMgbm90IG5lZWRlZAogICAgaWYgKCAkUGFyYW17Tm9GaWxlbmFtZUNsZWFufSApIHsKICAgICAgICByZXR1cm4gJFBhcmFte0ZpbGVuYW1lfTsKICAgIH0KCiAgICBteSAkVHlwZSA9IGxjKCAkUGFyYW17VHlwZX0gfHwgJ2xvY2FsJyApOwoKICAgIGlmICggJFR5cGUgZXEgJ21kNScgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVuY29kZScpLT5FbmNvZGVPdXRwdXQoIFwkUGFyYW17RmlsZW5hbWV9ICk7CiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9IG1kNV9oZXgoICRQYXJhbXtGaWxlbmFtZX0gKTsKICAgIH0KCiAgICAjIHJlcGxhY2UgaW52YWxpZCB0b2tlbiBmb3IgYXR0YWNobWVudCBmaWxlIG5hbWVzCiAgICBlbHNpZiAoICRUeXBlIGVxICdhdHRhY2htZW50JyApIHsKCiAgICAgICAgIyB0cmltIHdoaXRlc3BhY2UKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvXlxzK3xccnxcbnxccyskLy9nOwoKICAgICAgICAjIHN0cmlwIGxlYWRpbmcgZG90cwogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy9eXC4rLy87CgogICAgICAgICMgb25seSB3aGl0ZWxpc3RlZCBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gZmlsZW5hbWUgZm9yIHNlY3VyaXR5CiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9fiBzL1teXHdcLSsuI19dL18vZzsKCiAgICAgICAgIyBFbmNsb3NlZCBhbHBoYW51bWVyaWNzIGFyZSBrZXB0IG9uIG9sZGVyIFBlcmwgdmVyc2lvbnMsIG1ha2Ugc3VyZSB0byByZXBsYWNlIHRoZW0gdG9vLgogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy9bXHh7MjQ2MH0tXHh7MjRGRn1dL18vZzsKCiAgICAgICAgIyByZXBsYWNlIHV0ZjggYW5kIGlzbwogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy8oXHh7MDBDM31ceHswMEE0fXxceHswMEE0fSkvYWUvZzsKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvKFx4ezAwQzN9XHh7MDBCNn18XHh7MDBCNn0pL29lL2c7CiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9fiBzLyhceHswMEMzfVx4ezAwQkN9fFx4ezAwRkN9KS91ZS9nOwogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy8oXHh7MDBDM31ceHswMDlGfXxceHswMEM0fSkvQWUvZzsKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvKFx4ezAwQzN9XHh7MDA5Nn18XHh7MDA5Nn0pL09lL2c7CiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9fiBzLyhceHswMEMzfVx4ezAwOUN9fFx4ezAwOUN9KS9VZS9nOwogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy8oXHh7MDBDM31ceHswMDlGfXxceHswMERGfSkvc3MvZzsKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvLSsvLS9nOwoKICAgICAgICAjIHNlcGFyYXRlIGZpbGVuYW1lIGFuZCBleHRlbnNpb24KICAgICAgICBteSAkRmlsZU5hbWUgPSAkUGFyYW17RmlsZW5hbWV9OwogICAgICAgIG15ICRGaWxlRXh0ICA9ICcnOwogICAgICAgIGlmICggJFBhcmFte0ZpbGVuYW1lfSA9fiAvKC4qKVwuKyhbXi5dKykkLyApIHsKICAgICAgICAgICAgJEZpbGVOYW1lID0gJDE7CiAgICAgICAgICAgICRGaWxlRXh0ICA9ICcuJyAuICQyOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBsZW5ndGggJEZpbGVOYW1lICkgewogICAgICAgICAgICBteSAkTW9kaWZpZWROYW1lID0gJEZpbGVOYW1lIC4gJEZpbGVFeHQ7CgogICAgICAgICAgICB3aGlsZSAoIGxlbmd0aCBlbmNvZGUoICdVVEYtOCcsICRNb2RpZmllZE5hbWUgKSA+IDIyMCApIHsKCiAgICAgICAgICAgICAgICAjIFJlbW92ZSBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZW5hbWUgc3RyaW5nCiAgICAgICAgICAgICAgICAjICAgdW50aWwgd2UgZ2V0IGFjY2VwdGFibGUgMjIwIGJ5dGUgbG9uZyBmaWxlbmFtZSBzaXplIGluY2x1ZGluZyBleHRlbnNpb24uCiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCAkRmlsZU5hbWUgPiAxICkgewogICAgICAgICAgICAgICAgICAgIGNob3AgJEZpbGVOYW1lOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgSWYgd2UgcmVhY2hlZCBtaW5pbXVtIGZpbGVuYW1lIGxlbmd0aCwgcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSB0aGUgZW5kIG9mIHRoZSBleHRlbnNpb24gc3RyaW5nLgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY2hvcCAkRmlsZUV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTW9kaWZpZWROYW1lID0gJEZpbGVOYW1lIC4gJEZpbGVFeHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9ICRNb2RpZmllZE5hbWU7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgdHJpbSB3aGl0ZXNwYWNlCiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9fiBzL15ccyt8XHJ8XG58XHMrJC8vZzsKCiAgICAgICAgIyBzdHJpcCBsZWFkaW5nIGRvdHMKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvXlwuKy8vOwoKICAgICAgICAjIG9ubHkgd2hpdGVsaXN0ZWQgY2hhcmFjdGVycyBhbGxvd2VkIGluIGZpbGVuYW1lIGZvciBzZWN1cml0eQogICAgICAgIGlmICggISRQYXJhbXtOb1JlcGxhY2V9ICkgewogICAgICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvW15cd1wtKy4jX10vXy9nOwoKICAgICAgICAgICAgIyBFbmNsb3NlZCBhbHBoYW51bWVyaWNzIGFyZSBrZXB0IG9uIG9sZGVyIFBlcmwgdmVyc2lvbnMsIG1ha2Ugc3VyZSB0byByZXBsYWNlIHRoZW0gdG9vLgogICAgICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvW1x4ezI0NjB9LVx4ezI0RkZ9XS9fL2c7CiAgICAgICAgfQoKICAgICAgICAjIHNlcGFyYXRlIGZpbGVuYW1lIGFuZCBleHRlbnNpb24KICAgICAgICBteSAkRmlsZU5hbWUgPSAkUGFyYW17RmlsZW5hbWV9OwogICAgICAgIG15ICRGaWxlRXh0ICA9ICcnOwogICAgICAgIGlmICggJFBhcmFte0ZpbGVuYW1lfSA9fiAvKC4qKVwuKyhbXi5dKykkLyApIHsKICAgICAgICAgICAgJEZpbGVOYW1lID0gJDE7CiAgICAgICAgICAgICRGaWxlRXh0ICA9ICcuJyAuICQyOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBsZW5ndGggJEZpbGVOYW1lICkgewogICAgICAgICAgICBteSAkTW9kaWZpZWROYW1lID0gJEZpbGVOYW1lIC4gJEZpbGVFeHQ7CgogICAgICAgICAgICB3aGlsZSAoIGxlbmd0aCBlbmNvZGUoICdVVEYtOCcsICRNb2RpZmllZE5hbWUgKSA+IDIyMCApIHsKCiAgICAgICAgICAgICAgICAjIFJlbW92ZSBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZW5hbWUgc3RyaW5nCiAgICAgICAgICAgICAgICAjICAgdW50aWwgd2UgZ2V0IGFjY2VwdGFibGUgMjIwIGJ5dGUgbG9uZyBmaWxlbmFtZSBzaXplIGluY2x1ZGluZyBleHRlbnNpb24uCiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCAkRmlsZU5hbWUgPiAxICkgewogICAgICAgICAgICAgICAgICAgIGNob3AgJEZpbGVOYW1lOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgSWYgd2UgcmVhY2hlZCBtaW5pbXVtIGZpbGVuYW1lIGxlbmd0aCwgcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSB0aGUgZW5kIG9mIHRoZSBleHRlbnNpb24gc3RyaW5nLgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY2hvcCAkRmlsZUV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTW9kaWZpZWROYW1lID0gJEZpbGVOYW1lIC4gJEZpbGVFeHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPSAkTW9kaWZpZWROYW1lOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBhcmFte0ZpbGVuYW1lfTsKfQoKPWhlYWQyIEZpbGVSZWFkKCkKCnRvIHJlYWQgZmlsZXMgZnJvbSBmaWxlIHN5c3RlbQoKICAgIG15ICRDb250ZW50U0NBTEFSUmVmID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAnYzpcc29tZVxsb2NhdGlvbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdmaWxlMnJlYWQudHh0JywKICAgICAgICAjIG9yIExvY2F0aW9uCiAgICAgICAgTG9jYXRpb24gID0+ICdjOlxzb21lXGxvY2F0aW9uXGZpbGUycmVhZC50eHQnLAogICAgKTsKCiAgICBteSAkQ29udGVudEFSUkFZUmVmID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAnYzpcc29tZVxsb2NhdGlvbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdmaWxlMnJlYWQudHh0JywKICAgICAgICAjIG9yIExvY2F0aW9uCiAgICAgICAgTG9jYXRpb24gID0+ICdjOlxzb21lXGxvY2F0aW9uXGZpbGUycmVhZC50eHQnLAoKICAgICAgICBSZXN1bHQgICAgPT4gJ0FSUkFZJywgIyBvcHRpb25hbCAtIFNDQUxBUnxBUlJBWQogICAgKTsKCiAgICBteSAkQ29udGVudFNDQUxBUlJlZiA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICBEaXJlY3RvcnkgICAgICAgPT4gJ2M6XHNvbWVcbG9jYXRpb24nLAogICAgICAgIEZpbGVuYW1lICAgICAgICA9PiAnZmlsZTJyZWFkLnR4dCcsCiAgICAgICAgIyBvciBMb2NhdGlvbgogICAgICAgIExvY2F0aW9uICAgICAgICA9PiAnYzpcc29tZVxsb2NhdGlvblxmaWxlMnJlYWQudHh0JywKCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdiaW5tb2RlJywgIyBvcHRpb25hbCAtIGJpbm1vZGV8dXRmOAogICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLCAgICMgb3B0aW9uYWwgLSBMb2NhbHxBdHRhY2htZW50fE1ENQogICAgICAgIFJlc3VsdCAgICAgICAgICA9PiAnU0NBTEFSJywgICMgb3B0aW9uYWwgLSBTQ0FMQVJ8QVJSQVkKICAgICAgICBEaXNhYmxlV2FybmluZ3MgPT4gMSwgICAgICAgICAjIG9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIEZpbGVSZWFkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEZIOwogICAgaWYgKCAkUGFyYW17RmlsZW5hbWV9ICYmICRQYXJhbXtEaXJlY3Rvcnl9ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9ICRTZWxmLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgICAgIEZpbGVuYW1lID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgICAgIFR5cGUgICAgID0+ICRQYXJhbXtUeXBlfSB8fCAnTG9jYWwnLCAgICAjIExvY2FsfEF0dGFjaG1lbnR8TUQ1CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17TG9jYXRpb259ID0gIiRQYXJhbXtEaXJlY3Rvcnl9LyRQYXJhbXtGaWxlbmFtZX0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TG9jYXRpb259ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0xvY2F0aW9ufSA9fiBzey8vfXsvfXhtc2c7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgRmlsZW5hbWUgYW5kIERpcmVjdG9yeSBvciBMb2NhdGlvbiEnLAogICAgICAgICk7CgogICAgfQoKICAgICMgc2V0IG9wZW4gbW9kZQogICAgbXkgJE1vZGUgPSAnPCc7CiAgICBpZiAoICRQYXJhbXtNb2RlfSAmJiAkUGFyYW17TW9kZX0gPX4gbXsgXEEgdXRmLT84IFx6IH14bXNpICkgewogICAgICAgICRNb2RlID0gJzw6dXRmOCc7CiAgICB9CgogICAgIyByZXR1cm4gaWYgZmlsZSBjYW4gbm90IG9wZW4KICAgIGlmICggIW9wZW4gJEZILCAkTW9kZSwgJFBhcmFte0xvY2F0aW9ufSApIHsgICAgIyMgbm8gY3JpdGljCiAgICAgICAgbXkgJEVycm9yID0gJCE7CgogICAgICAgIGlmICggISRQYXJhbXtEaXNhYmxlV2FybmluZ3N9ICkgewoKICAgICAgICAgICAgIyBDaGVjayBpZiBmaWxlIGV4aXN0cyBvbmx5IGlmIHN5c3RlbSB3YXMgbm90IGFibGUgdG8gb3BlbiBpdCAodG8gZ2V0IGJldHRlciBlcnJvciBtZXNzYWdlKS4KICAgICAgICAgICAgaWYgKCAhLWUgJFBhcmFte0xvY2F0aW9ufSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZpbGUgJyRQYXJhbXtMb2NhdGlvbn0nIGRvZXNuJ3QgZXhpc3QhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBvcGVuICckUGFyYW17TG9jYXRpb259JzogJEVycm9yIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9jayBmaWxlIChTaGFyZWQgTG9jaykKICAgIGlmICggIWZsb2NrICRGSCwgTE9DS19TSCApIHsKICAgICAgICBpZiAoICEkUGFyYW17RGlzYWJsZVdhcm5pbmdzfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGxvY2sgJyRQYXJhbXtMb2NhdGlvbn0nOiAkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZW5hYmxlIGJpbm1vZGUKICAgIGlmICggISRQYXJhbXtNb2RlfSB8fCAkUGFyYW17TW9kZX0gPX4gbXsgXEEgYmlubW9kZSB9eG1zaSApIHsKICAgICAgICBiaW5tb2RlICRGSDsKICAgIH0KCiAgICAjIHJlYWQgZmlsZSBhcyBhcnJheQogICAgaWYgKCAkUGFyYW17UmVzdWx0fSAmJiAkUGFyYW17UmVzdWx0fSBlcSAnQVJSQVknICkgewoKICAgICAgICAjIHJlYWQgZmlsZSBjb250ZW50IGF0IG9uY2UKICAgICAgICBteSBAQXJyYXkgPSA8JEZIPjsKICAgICAgICBjbG9zZSAkRkg7CgogICAgICAgIHJldHVybiBcQEFycmF5OwogICAgfQoKICAgICMgcmVhZCBmaWxlIGFzIHN0cmluZwogICAgbXkgJFN0cmluZyA9IGRvIHsgbG9jYWwgJC87IDwkRkg+IH07CiAgICBjbG9zZSAkRkg7CgogICAgcmV0dXJuIFwkU3RyaW5nOwp9Cgo9aGVhZDIgRmlsZVdyaXRlKCkKCnRvIHdyaXRlIGRhdGEgdG8gZmlsZSBzeXN0ZW0KCiAgICBteSAkRmlsZUxvY2F0aW9uID0gJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICBEaXJlY3RvcnkgPT4gJ2M6XHNvbWVcbG9jYXRpb24nLAogICAgICAgIEZpbGVuYW1lICA9PiAnZmlsZTJ3cml0ZS50eHQnLAogICAgICAgICMgb3IgTG9jYXRpb24KICAgICAgICBMb2NhdGlvbiAgPT4gJ2M6XHNvbWVcbG9jYXRpb25cZmlsZTJ3cml0ZS50eHQnLAoKICAgICAgICBDb250ZW50ICAgPT4gXCRDb250ZW50LAogICAgKTsKCiAgICBteSAkRmlsZUxvY2F0aW9uID0gJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICBEaXJlY3RvcnkgID0+ICdjOlxzb21lXGxvY2F0aW9uJywKICAgICAgICBGaWxlbmFtZSAgID0+ICdmaWxlMndyaXRlLnR4dCcsCiAgICAgICAgIyBvciBMb2NhdGlvbgogICAgICAgIExvY2F0aW9uICAgPT4gJ2M6XHNvbWVcbG9jYXRpb25cZmlsZTJ3cml0ZS50eHQnLAoKICAgICAgICBDb250ZW50ICAgID0+IFwkQ29udGVudCwKICAgICAgICBNb2RlICAgICAgID0+ICdiaW5tb2RlJywgIyBiaW5tb2RlfHV0ZjgKICAgICAgICBUeXBlICAgICAgID0+ICdMb2NhbCcsICAgIyBvcHRpb25hbCAtIExvY2FsfEF0dGFjaG1lbnR8TUQ1CiAgICAgICAgUGVybWlzc2lvbiA9PiAnNjQ0JywgICAgICMgb3B0aW9uYWwgLSB1bml4IGZpbGUgcGVybWlzc2lvbnMKICAgICk7CgpQbGF0Zm9ybSBub3RlOiBNYWNPUyAoSEZTKykgc3RvcmVzIGZpbGVuYW1lcyBhcyBVbmljb2RlIEM8TkZEPiBpbnRlcm5hbGx5LAphbmQgRGlyZWN0b3J5UmVhZCgpIHdpbGwgYWxzbyByZXBvcnQgdGhlbSBhcyBDPE5GRD4uCgo9Y3V0CgpzdWIgRmlsZVdyaXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAkUGFyYW17RmlsZW5hbWV9ICYmICRQYXJhbXtEaXJlY3Rvcnl9ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9ICRTZWxmLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgICAgIEZpbGVuYW1lICAgICAgICA9PiAkUGFyYW17RmlsZW5hbWV9LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJFBhcmFte1R5cGV9IHx8ICdMb2NhbCcsICAgICMgTG9jYWx8QXR0YWNobWVudHxNRDUKICAgICAgICAgICAgTm9GaWxlbmFtZUNsZWFuID0+ICRQYXJhbXtOb0ZpbGVuYW1lQ2xlYW59LAogICAgICAgICAgICBOb1JlcGxhY2UgICAgICAgPT4gJFBhcmFte05vUmVwbGFjZX0sCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17TG9jYXRpb259ID0gIiRQYXJhbXtEaXJlY3Rvcnl9LyRQYXJhbXtGaWxlbmFtZX0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TG9jYXRpb259ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0xvY2F0aW9ufSA9fiBzL1wvXC8vXC8vZzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBGaWxlbmFtZSBhbmQgRGlyZWN0b3J5IG9yIExvY2F0aW9uIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBvcGVuIG1vZGUgKGlmIGZpbGUgZXhpc3RzLCBsb2NrIGl0IG9uIG9wZW4sIGRvbmUgYnkgJys8JykKICAgIG15ICRFeGlzdHM7CiAgICBpZiAoIC1mICRQYXJhbXtMb2NhdGlvbn0gKSB7CiAgICAgICAgJEV4aXN0cyA9IDE7CiAgICB9CiAgICBteSAkTW9kZSA9ICc+JzsKICAgIGlmICgkRXhpc3RzKSB7CiAgICAgICAgJE1vZGUgPSAnKzwnOwogICAgfQogICAgaWYgKCAkUGFyYW17TW9kZX0gJiYgJFBhcmFte01vZGV9ID1+IC9eKHV0Zjh8dXRmXC04KS9pICkgewogICAgICAgICRNb2RlID0gJz46dXRmOCc7CiAgICAgICAgaWYgKCRFeGlzdHMpIHsKICAgICAgICAgICAgJE1vZGUgPSAnKzw6dXRmOCc7CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIGlmIGZpbGUgY2FuIG5vdCBvcGVuCiAgICBteSAkRkg7CiAgICBpZiAoICFvcGVuICRGSCwgJE1vZGUsICRQYXJhbXtMb2NhdGlvbn0gKSB7ICAgICMjIG5vIGNyaXRpYwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3Qgd3JpdGUgJyRQYXJhbXtMb2NhdGlvbn0nOiAkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2NrIGZpbGUgKEV4Y2x1c2l2ZSBMb2NrKQogICAgaWYgKCAhZmxvY2sgJEZILCBMT0NLX0VYICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgbG9jayAnJFBhcmFte0xvY2F0aW9ufSc6ICQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgZW1wdHkgZmlsZSBmaXJzdCAobmVlZGVkIGlmIGZpbGUgaXMgb3BlbiBieSAnKzwnKQogICAgdHJ1bmNhdGUgJEZILCAwOwoKICAgICMgZW5hYmxlIGJpbm1vZGUKICAgIGlmICggISRQYXJhbXtNb2RlfSB8fCBsYyAkUGFyYW17TW9kZX0gZXEgJ2Jpbm1vZGUnICkgewoKICAgICAgICAjIG1ha2Ugc3VyZSwgdGhhdCBubyB1dGY4IHN0YW1wIGV4aXN0cyAob3RoZXJ3YXkgcGVybCB3aWxsIGRvIGF1dG8gY29udmVydCB0byBpc28pCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVuY29kZScpLT5FbmNvZGVPdXRwdXQoICRQYXJhbXtDb250ZW50fSApOwoKICAgICAgICAjIHNldCBmaWxlIGhhbmRsZSB0byBiaW5tb2RlCiAgICAgICAgYmlubW9kZSAkRkg7CiAgICB9CgogICAgIyB3cml0ZSBmaWxlIGlmIGNvbnRlbnQgaXMgbm90IHVuZGVmCiAgICBpZiAoIGRlZmluZWQgJHsgJFBhcmFte0NvbnRlbnR9IH0gKSB7CiAgICAgICAgcHJpbnQgJEZIICR7ICRQYXJhbXtDb250ZW50fSB9OwogICAgfQoKICAgICMgd3JpdGUgZW1wdHkgZmlsZSBpZiBjb250ZW50IGlzIHVuZGVmCiAgICBlbHNlIHsKICAgICAgICBwcmludCAkRkggJyc7CiAgICB9CgogICAgIyBjbG9zZSB0aGUgZmlsZWhhbmRsZQogICAgY2xvc2UgJEZIOwoKICAgICMgc2V0IHBlcm1pc3Npb24KICAgIGlmICggJFBhcmFte1Blcm1pc3Npb259ICkgewogICAgICAgIGlmICggbGVuZ3RoICRQYXJhbXtQZXJtaXNzaW9ufSA9PSAzICkgewogICAgICAgICAgICAkUGFyYW17UGVybWlzc2lvbn0gPSAiMCRQYXJhbXtQZXJtaXNzaW9ufSI7CiAgICAgICAgfQogICAgICAgIGNobW9kKCBvY3QoICRQYXJhbXtQZXJtaXNzaW9ufSApLCAkUGFyYW17TG9jYXRpb259ICk7CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtGaWxlbmFtZX0gaWYgJFBhcmFte0ZpbGVuYW1lfTsKICAgIHJldHVybiAkUGFyYW17TG9jYXRpb259Owp9Cgo9aGVhZDIgRmlsZURlbGV0ZSgpCgp0byBkZWxldGUgYSBmaWxlIGZyb20gZmlsZSBzeXN0ZW0KCiAgICBteSAkU3VjY2VzcyA9ICRNYWluT2JqZWN0LT5GaWxlRGVsZXRlKAogICAgICAgIERpcmVjdG9yeSAgICAgICA9PiAnYzpcc29tZVxsb2NhdGlvbicsCiAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdtZV90by9hbGFsLnhtbCcsCiAgICAgICAgIyBvciBMb2NhdGlvbgogICAgICAgIExvY2F0aW9uICAgICAgICA9PiAnYzpcc29tZVxsb2NhdGlvblxtZV90b1xhbGFsLnhtbCcsCgogICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLCAgICAgIyBvcHRpb25hbCAtIExvY2FsfEF0dGFjaG1lbnR8TUQ1CiAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsICAgICAgICAgICAjIG9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIEZpbGVEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICRQYXJhbXtGaWxlbmFtZX0gJiYgJFBhcmFte0RpcmVjdG9yeX0gKSB7CgogICAgICAgICMgZmlsZW5hbWUgY2xlYW4gdXAKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID0gJFNlbGYtPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICAgICAgRmlsZW5hbWUgID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgICAgIFR5cGUgICAgICA9PiAkUGFyYW17VHlwZX0gfHwgJ0xvY2FsJywgICAgIyBMb2NhbHxBdHRhY2htZW50fE1ENQogICAgICAgICAgICBOb1JlcGxhY2UgPT4gJFBhcmFte05vUmVwbGFjZX0sCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17TG9jYXRpb259ID0gIiRQYXJhbXtEaXJlY3Rvcnl9LyRQYXJhbXtGaWxlbmFtZX0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TG9jYXRpb259ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0xvY2F0aW9ufSA9fiBzL1wvXC8vXC8vZzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBGaWxlbmFtZSBhbmQgRGlyZWN0b3J5IG9yIExvY2F0aW9uIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRyeSB0byBkZWxldGUgZmlsZQogICAgaWYgKCAhdW5saW5rKCAkUGFyYW17TG9jYXRpb259ICkgKSB7CiAgICAgICAgbXkgJEVycm9yID0gJCE7CgogICAgICAgIGlmICggISRQYXJhbXtEaXNhYmxlV2FybmluZ3N9ICkgewoKICAgICAgICAgICAgIyBDaGVjayBpZiBmaWxlIGV4aXN0cyBvbmx5IGluIGNhc2UgdGhhdCBkZWxldGUgZmFpbGVkLgogICAgICAgICAgICBpZiAoICEtZSAkUGFyYW17TG9jYXRpb259ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRmlsZSAnJFBhcmFte0xvY2F0aW9ufScgZG9lc24ndCBleGlzdCEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGRlbGV0ZSAnJFBhcmFte0xvY2F0aW9ufSc6ICRFcnJvciIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBGaWxlR2V0TVRpbWUoKQoKZ2V0IHRpbWVzdGFtcCBvZiBmaWxlIGNoYW5nZSB0aW1lCgogICAgbXkgJEZpbGVNVGltZSA9ICRNYWluT2JqZWN0LT5GaWxlR2V0TVRpbWUoCiAgICAgICAgRGlyZWN0b3J5ID0+ICdjOlxzb21lXGxvY2F0aW9uJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ21lX3RvL2FsYWwueG1sJywKICAgICAgICAjIG9yIExvY2F0aW9uCiAgICAgICAgTG9jYXRpb24gID0+ICdjOlxzb21lXGxvY2F0aW9uXG1lX3RvXGFsYWwueG1sJywKICAgICk7Cgo9Y3V0CgpzdWIgRmlsZUdldE1UaW1lIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEZIOwogICAgaWYgKCAkUGFyYW17RmlsZW5hbWV9ICYmICRQYXJhbXtEaXJlY3Rvcnl9ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9ICRTZWxmLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgICAgIEZpbGVuYW1lID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgICAgIFR5cGUgICAgID0+ICRQYXJhbXtUeXBlfSB8fCAnTG9jYWwnLCAgICAjIExvY2FsfEF0dGFjaG1lbnR8TUQ1CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17TG9jYXRpb259ID0gIiRQYXJhbXtEaXJlY3Rvcnl9LyRQYXJhbXtGaWxlbmFtZX0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TG9jYXRpb259ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0xvY2F0aW9ufSA9fiBzey8vfXsvfXhtc2c7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgRmlsZW5hbWUgYW5kIERpcmVjdG9yeSBvciBMb2NhdGlvbiEnLAogICAgICAgICk7CgogICAgfQoKICAgICMgZ2V0IGZpbGUgbWV0YWRhdGEKICAgIG15ICRTdGF0ID0gc3RhdCggJFBhcmFte0xvY2F0aW9ufSApOwoKICAgIGlmICggISRTdGF0ICkgewogICAgICAgIG15ICRFcnJvciA9ICQhOwoKICAgICAgICBpZiAoICEkUGFyYW17RGlzYWJsZVdhcm5pbmdzfSApIHsKCiAgICAgICAgICAgICMgQ2hlY2sgaWYgZmlsZSBleGlzdHMgb25seSBpZiBzeXN0ZW0gd2FzIG5vdCBhYmxlIHRvIG9wZW4gaXQgKHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZSkuCiAgICAgICAgICAgIGlmICggIS1lICRQYXJhbXtMb2NhdGlvbn0gKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJGaWxlICckUGFyYW17TG9jYXRpb259JyBkb2Vzbid0IGV4aXN0ISIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW5ub3Qgc3RhdCBmaWxlICckUGFyYW17TG9jYXRpb259JzogJEVycm9yIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkU3RhdC0+bXRpbWUoKTsKfQoKPWhlYWQyIE1ENXN1bSgpCgpnZXQgYW4gQzxNRDU+IHN1bSBvZiBhIGZpbGUgb3IgYSBzdHJpbmcKCiAgICBteSAkTUQ1U3VtID0gJE1haW5PYmplY3QtPk1ENXN1bSgKICAgICAgICBGaWxlbmFtZSA9PiAnL3BhdGgvdG8vbWVfdG9fYWxhbC54bWwnLAogICAgKTsKCiAgICBteSAkTUQ1U3VtID0gJE1haW5PYmplY3QtPk1ENXN1bSgKICAgICAgICBTdHJpbmcgPT4gXCRTb21lU3RyaW5nLAogICAgKTsKCiAgICAjIG5vdGU6IG5lZWRzIG1vcmUgbWVtb3J5IQogICAgbXkgJE1ENVN1bSA9ICRNYWluT2JqZWN0LT5NRDVzdW0oCiAgICAgICAgU3RyaW5nID0+ICRTb21lU3RyaW5nLAogICAgKTsKCj1jdXQKCnN1YiBNRDVzdW0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICEkUGFyYW17RmlsZW5hbWV9ICYmICFkZWZpbmVkKCAkUGFyYW17U3RyaW5nfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBGaWxlbmFtZSBvciBTdHJpbmchJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG1kNXN1bSBmaWxlCiAgICBpZiAoICRQYXJhbXtGaWxlbmFtZX0gKSB7CgogICAgICAgICMgb3BlbiBmaWxlCiAgICAgICAgbXkgJEZIOwogICAgICAgIGlmICggIW9wZW4gJEZILCAnPCcsICRQYXJhbXtGaWxlbmFtZX0gKSB7ICAgICMjIG5vIGNyaXRpYwogICAgICAgICAgICBteSAkRXJyb3IgPSAkITsKCiAgICAgICAgICAgICMgQ2hlY2sgaWYgZmlsZSBleGlzdHMgb25seSBpZiBzeXN0ZW0gd2FzIG5vdCBhYmxlIHRvIG9wZW4gaXQgKHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZSkuCiAgICAgICAgICAgIGlmICggIS1lICRQYXJhbXtGaWxlbmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJGaWxlICckUGFyYW17RmlsZW5hbWV9JyBkb2Vzbid0IGV4aXN0ISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgcmVhZCAnJFBhcmFte0ZpbGVuYW1lfSc6ICRFcnJvciIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGJpbm1vZGUgJEZIOwogICAgICAgIG15ICRNRDVzdW0gPSBEaWdlc3Q6Ok1ENS0+bmV3KCktPmFkZGZpbGUoJEZIKS0+aGV4ZGlnZXN0KCk7CiAgICAgICAgY2xvc2UgJEZIOwoKICAgICAgICByZXR1cm4gJE1ENXN1bTsKICAgIH0KCiAgICAjIGdldCBlbmNvZGUgb2JqZWN0CiAgICBteSAkRW5jb2RlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVuY29kZScpOwoKICAgICMgbWQ1c3VtIHN0cmluZwogICAgaWYgKCAhcmVmICRQYXJhbXtTdHJpbmd9ICkgewogICAgICAgICRFbmNvZGVPYmplY3QtPkVuY29kZU91dHB1dCggXCRQYXJhbXtTdHJpbmd9ICk7CiAgICAgICAgcmV0dXJuIG1kNV9oZXgoICRQYXJhbXtTdHJpbmd9ICk7CiAgICB9CgogICAgIyBtZDVzdW0gc2NhbGFyIHJlZmVyZW5jZQogICAgaWYgKCByZWYgJFBhcmFte1N0cmluZ30gZXEgJ1NDQUxBUicgKSB7CiAgICAgICAgJEVuY29kZU9iamVjdC0+RW5jb2RlT3V0cHV0KCAkUGFyYW17U3RyaW5nfSApOwogICAgICAgIHJldHVybiBtZDVfaGV4KCAkeyAkUGFyYW17U3RyaW5nfSB9ICk7CiAgICB9CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBhIFNDQUxBUiByZWZlcmVuY2UgbGlrZSAnU3RyaW5nID0+IFwkQ29udGVudCcgaW4gU3RyaW5nIHBhcmFtLiIsCiAgICApOwoKICAgIHJldHVybjsKfQoKPWhlYWQyIER1bXAoKQoKZHVtcCB2YXJpYWJsZSB0byBhbiBzdHJpbmcKCiAgICBteSAkRHVtcCA9ICRNYWluT2JqZWN0LT5EdW1wKAogICAgICAgICRTb21lVmFyaWFibGUsCiAgICApOwoKICAgIG15ICREdW1wID0gJE1haW5PYmplY3QtPkR1bXAoCiAgICAgICAgewogICAgICAgICAgICBLZXkxID0+ICRTb21lVmFyaWFibGUsCiAgICAgICAgfSwKICAgICk7CgogICAgZHVtcCBvbmx5IGluIGFzY2lpIGNoYXJhY3RlcnMgKD4gMTI4IHdpbGwgYmUgbWFya2VkIGFzIFx4ey4ufSkKCiAgICBteSAkRHVtcCA9ICRNYWluT2JqZWN0LT5EdW1wKAogICAgICAgICRTb21lVmFyaWFibGUsCiAgICAgICAgJ2FzY2lpJywgICAgICAgICMgYXNjaWl8YmluYXJ5IC0gZGVmYXVsdCBpcyBiaW5hcnkKICAgICk7Cgo9Y3V0CgpzdWIgRHVtcCB7CiAgICBteSAoICRTZWxmLCAkRGF0YSwgJFR5cGUgKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgIGlmICggIWRlZmluZWQgJERhdGEgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFwkU3RyaW5nIGluIER1bXAoKSEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB0eXBlCiAgICBpZiAoICEkVHlwZSApIHsKICAgICAgICAkVHlwZSA9ICdiaW5hcnknOwogICAgfQogICAgaWYgKCAkVHlwZSBuZSAnYXNjaWknICYmICRUeXBlIG5lICdiaW5hcnknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiSW52YWxpZCBUeXBlICckVHlwZSchIgogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbWlsZCBwcmV0dHkgcHJpbnQKICAgICREYXRhOjpEdW1wZXI6OkluZGVudCA9IDE7CgogICAgIyBzb3J0IGhhc2gga2V5cwogICAgJERhdGE6OkR1bXBlcjo6U29ydGtleXMgPSAxOwoKICAgICMgVGhpcyBEdW1wKCkgaXMgdXNpbmcgRGF0YTo6RHVtcGVyIHdpdGggYSB1dGY4IHdvcmthcm91bmRzIHRvIGhhbmRsZQogICAgIyB0aGUgYnVnIFtydC5jcGFuLm9yZyAjMjg2MDddIERhdGE6OkR1bXBlcjo6RHVtcGVyIGlzIGR1bXBpbmcgdXRmOAogICAgIyBzdHJpbmdzIGFzIGxhdGluMS84Yml0IGluc3RlYWQgb2YgdXRmOC4gVXNlIFN0b3JhYmxlIG1vZHVsZSB1c2VkIGZvcgogICAgIyB3b3JrYXJvdW5kLgogICAgIyAtPiBodHRwOi8vcnQuY3Bhbi5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0yODYwNwogICAgaWYgKCAkVHlwZSBlcSAnYmluYXJ5JyApIHsKCiAgICAgICAgIyBDbG9uZSB0aGUgZGF0YSBiZWNhdXNlIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgdXRmOCBmbGFnIGluIGFsbAogICAgICAgICMgcmVmZXJlbmNlIHZhcmlhYmxlcyBhbmQgZG8gbm90IHRvIHdhbnQgdG8gZG8gdGhpcyBpbiB0aGUgb3JpZy4KICAgICAgICAjIHZhcmlhYmxlcyBiZWNhdXNlIHRoZXkgd2lsbCBzdGlsbCB1c2VkIGluIHRoZSBzeXN0ZW0uCiAgICAgICAgbXkgJERhdGFOZXcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RvcmFibGUnKS0+Q2xvbmUoIERhdGEgPT4gXCREYXRhICk7CgogICAgICAgICMgRGlzYWJsZSB1dGY4IGZsYWcuCiAgICAgICAgJFNlbGYtPl9EdW1wKCREYXRhTmV3KTsKCiAgICAgICAgIyBEdW1wIGl0IGFzIGJpbmFyeSBzdHJpbmdzLgogICAgICAgIG15ICRTdHJpbmcgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggJHskRGF0YU5ld30gKTsgICAgIyMgbm8gY3JpdGljCgogICAgICAgICMgRW5hYmxlIHV0ZjggZmxhZy4KICAgICAgICBFbmNvZGU6Ol91dGY4X29uKCRTdHJpbmcpOwoKICAgICAgICByZXR1cm4gJFN0cmluZzsKICAgIH0KCiAgICAjIGZhbGxiYWNrIGlmIFN0b3JhYmxlIGNhbiBub3QgYmUgbG9hZGVkCiAgICByZXR1cm4gRGF0YTo6RHVtcGVyOjpEdW1wZXIoJERhdGEpOyAgICAgICAgICAgICAgICAgICAgICAjIyBubyBjcml0aWMKCn0KCj1oZWFkMiBEaXJlY3RvcnlSZWFkKCkKCnJlYWRzIGEgZGlyZWN0b3J5IGFuZCByZXR1cm5zIGFuIGFycmF5IHdpdGggcmVzdWx0cy4KCiAgICBteSBARmlsZXNJbkRpcmVjdG9yeSA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAnL3RtcCcsCiAgICAgICAgRmlsdGVyICAgID0+ICdGaWxlbmFtKicsCiAgICApOwoKICAgIG15IEBGaWxlc0luRGlyZWN0b3J5ID0gJE1haW5PYmplY3QtPkRpcmVjdG9yeVJlYWQoCiAgICAgICAgRGlyZWN0b3J5ID0+ICRQYXRoLAogICAgICAgIEZpbHRlciAgICA9PiAnKicsCiAgICApOwoKcmVhZCBhbGwgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgYXMgd2VsbCAocmVjdXJzaXZlKToKCiAgICBteSBARmlsZXNJbkRpcmVjdG9yeSA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkUGF0aCwKICAgICAgICBGaWx0ZXIgICAgPT4gJyonLAogICAgICAgIFJlY3Vyc2l2ZSA9PiAxLAogICAgKTsKCllvdSBjYW4gcGFzcyBzZXZlcmFsIGFkZGl0aW9uYWwgZmlsdGVycyBhdCBvbmNlOgoKICAgIG15IEBGaWxlc0luRGlyZWN0b3J5ID0gJE1haW5PYmplY3QtPkRpcmVjdG9yeVJlYWQoCiAgICAgICAgRGlyZWN0b3J5ID0+ICcvdG1wJywKICAgICAgICBGaWx0ZXIgICAgPT4gXEBNeUZpbHRlcnMsCiAgICApOwoKVGhlIHJlc3VsdCBzdHJpbmdzIGFyZSBhYnNvbHV0ZSBwYXRocywgYW5kIHRoZXkgYXJlIGNvbnZlcnRlZCB0byB1dGY4LgoKVXNlIHRoZSAnU2lsZW50JyBwYXJhbWV0ZXIgdG8gc3VwcHJlc3MgbG9nIG1lc3NhZ2VzIHdoZW4gYSBkaXJlY3RvcnkKZG9lcyBub3QgaGF2ZSB0byBleGlzdDoKCiAgICBteSBARmlsZXNJbkRpcmVjdG9yeSA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAnL3NwZWNpYWwvb3B0aW9uYWwvZGlyZWN0b3J5LycsCiAgICAgICAgRmlsdGVyICAgID0+ICcqJywKICAgICAgICBTaWxlbnQgICAgPT4gMSwgICAgICMgd2lsbCBub3QgbG9nIGVycm9ycyBpZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0CiAgICApOwoKUGxhdGZvcm0gbm90ZTogTWFjT1MgKEhGUyspIHN0b3JlcyBmaWxlbmFtZXMgYXMgVW5pY29kZSBDPE5GRD4gaW50ZXJuYWxseSwKYW5kIERpcmVjdG9yeVJlYWQoKSB3aWxsIGFsc28gcmVwb3J0IHRoZW0gYXMgQzxORkQ+LgoKPWN1dAoKc3ViIERpcmVjdG9yeVJlYWQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbXMKICAgIGZvciBteSAkTmVlZGVkIChxdyhEaXJlY3RvcnkgRmlsdGVyKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZGVkICROZWVkZWQ6ICQhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiBkaXJlY3RvcnkgZG9lc24ndCBleGlzdHMgc3RvcAogICAgaWYgKCAhLWQgJFBhcmFte0RpcmVjdG9yeX0gJiYgISRQYXJhbXtTaWxlbnR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3Q6ICRQYXJhbXtEaXJlY3Rvcnl9OiAkISIsCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBGaWx0ZXIgcGFyYW0KICAgIGlmICggcmVmICRQYXJhbXtGaWx0ZXJ9IG5lICcnICYmIHJlZiAkUGFyYW17RmlsdGVyfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBNZXNzYWdlICA9PiAnRmlsdGVyIHBhcmFtIG5lZWQgdG8gYmUgc2NhbGFyIG9yIGFycmF5IHJlZiEnLAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcHJlcGFyZSBub24gYXJyYXkgZmlsdGVyCiAgICBpZiAoIHJlZiAkUGFyYW17RmlsdGVyfSBuZSAnQVJSQVknICkgewogICAgICAgICRQYXJhbXtGaWx0ZXJ9ID0gWyAkUGFyYW17RmlsdGVyfSBdOwogICAgfQoKICAgICMgZXhlY3V0ZXMgZ2xvYiBmb3IgZXZlcnkgZmlsdGVyCiAgICBteSBAR2xvYlJlc3VsdHM7CiAgICBteSAlU2VlbjsKCiAgICBmb3IgbXkgJEZpbHRlciAoIEB7ICRQYXJhbXtGaWx0ZXJ9IH0gKSB7CiAgICAgICAgbXkgQEdsb2IgPSBnbG9iICIkUGFyYW17RGlyZWN0b3J5fS8kRmlsdGVyIjsKCiAgICAgICAgIyBsb29rIGZvciByZXBlYXRlZCB2YWx1ZXMKICAgICAgICBOQU1FOgogICAgICAgIGZvciBteSAkR2xvYk5hbWUgKEBHbG9iKSB7CgogICAgICAgICAgICBuZXh0IE5BTUUgaWYgIS1lICRHbG9iTmFtZTsKICAgICAgICAgICAgaWYgKCAhJFNlZW57JEdsb2JOYW1lfSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQEdsb2JSZXN1bHRzLCAkR2xvYk5hbWU7CiAgICAgICAgICAgICAgICAkU2VlbnskR2xvYk5hbWV9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRQYXJhbXtSZWN1cnNpdmV9ICkgewoKICAgICAgICAjIGxvb3AgcHJvdGVjdGlvbiB0byBwcmV2ZW50IHN5bWxpbmtzIGNhdXNpbmcgbG9ja3VwcwogICAgICAgICRQYXJhbXtMb29wUHJvdGVjdGlvbn0rKzsKICAgICAgICByZXR1cm4gaWYgJFBhcmFte0xvb3BQcm90ZWN0aW9ufSA+IDEwMDsKCiAgICAgICAgIyBjaGVjayBhbGwgZmlsZXMgaW4gY3VycmVudCBkaXJlY3RvcnkKICAgICAgICBteSBARGlyZWN0b3JpZXMgPSBnbG9iICIkUGFyYW17RGlyZWN0b3J5fS8qIjsKCiAgICAgICAgRElSRUNUT1JZOgogICAgICAgIGZvciBteSAkRGlyZWN0b3J5IChARGlyZWN0b3JpZXMpIHsKCiAgICAgICAgICAgICMgcmV0dXJuIGlmIGZpbGUgaXMgbm90IGEgZGlyZWN0b3J5CiAgICAgICAgICAgIG5leHQgRElSRUNUT1JZIGlmICEtZCAkRGlyZWN0b3J5OwoKICAgICAgICAgICAgIyByZXBlYXQgc2FtZSBnbG9iIGZvciBkaXJlY3RvcnkKICAgICAgICAgICAgbXkgQFN1YlJlc3VsdCA9ICRTZWxmLT5EaXJlY3RvcnlSZWFkKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgRGlyZWN0b3J5ID0+ICREaXJlY3RvcnksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCByZXN1bHQgdG8gaGFzaAogICAgICAgICAgICBmb3IgbXkgJFJlc3VsdCAoQFN1YlJlc3VsdCkgewogICAgICAgICAgICAgICAgaWYgKCAhJFNlZW57JFJlc3VsdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAR2xvYlJlc3VsdHMsICRSZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgJFNlZW57JFJlc3VsdH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgbm8gcmVzdWx0cwogICAgcmV0dXJuIGlmICFAR2xvYlJlc3VsdHM7CgogICAgIyBnZXQgZW5jb2RlIG9iamVjdAogICAgbXkgJEVuY29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnKTsKCiAgICAjIGNvbXBvc2Ugbm9ybWFsaXplIGV2ZXJ5IG5hbWUgaW4gdGhlIGZpbGUgbGlzdAogICAgbXkgQFJlc3VsdHM7CiAgICBmb3IgbXkgJEZpbGVuYW1lIChAR2xvYlJlc3VsdHMpIHsKCiAgICAgICAgIyBGaXJzdCBjb252ZXJ0IGZpbGVuYW1lIHRvIHV0Zi04LCB3aXRoIGFkZGl0aW9uYWwgQ2hlY2sgcGFyYW1ldGVyCiAgICAgICAgIyB0byByZXBsYWNlIHBvc3NpYmxlIG1hbGZvcm1lZCBjaGFyYWN0ZXJzIGFuZCBwcmV2ZW50IGZ1cnRoZXIgZXJyb3JzLgogICAgICAgICRGaWxlbmFtZSA9ICRFbmNvZGVPYmplY3QtPkNvbnZlcnQyQ2hhcnNldEludGVybmFsKAogICAgICAgICAgICBUZXh0ICA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgIEZyb20gID0+ICd1dGYtOCcsCiAgICAgICAgICAgIENoZWNrID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAUmVzdWx0cywgJEZpbGVuYW1lOwogICAgfQoKICAgICMgYWx3YXlzIHNvcnQgdGhlIHJlc3VsdAogICAgQFJlc3VsdHMgPSBzb3J0IEBSZXN1bHRzOwoKICAgIHJldHVybiBAUmVzdWx0czsKfQoKPWhlYWQyIEdlbmVyYXRlUmFuZG9tU3RyaW5nKCkKCmdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyBvZiBkZWZpbmVkIGxlbmd0aCwgYW5kIG9mIGEgZGVmaW5lZCBhbHBoYWJldC4KZGVmYXVsdHMgdG8gYSBsZW5ndGggb2YgMTYgYW5kIGFscGhhbnVtZXJpY3MgKCAwLi45LCBBLVogYW5kIGEteikuCgogICAgbXkgJFN0cmluZyA9ICRNYWluT2JqZWN0LT5HZW5lcmF0ZVJhbmRvbVN0cmluZygpOwoKcmV0dXJucwoKICAgICRTdHJpbmcgPSAnbUhMT3g3cHNXak1lNVBqNyc7Cgp3aXRoIHNwZWNpZmljIGxlbmd0aDoKCiAgICBteSAkU3RyaW5nID0gJE1haW5PYmplY3QtPkdlbmVyYXRlUmFuZG9tU3RyaW5nKAogICAgICAgIExlbmd0aCA9PiAzMiwKICAgICk7CgpyZXR1cm5zCgogICAgJFN0cmluZyA9ICdhenpIYWI3MndJbEFYRHJ4SGV4c0k1YUVOc0VTeEFPNyc7Cgp3aXRoIHNwZWNpZmljIGxlbmd0aCBhbmQgYWxwaGFiZXQ6CgogICAgbXkgJFN0cmluZyA9ICRNYWluT2JqZWN0LT5HZW5lcmF0ZVJhbmRvbVN0cmluZygKICAgICAgICBMZW5ndGggICAgID0+IDMyLAogICAgICAgIERpY3Rpb25hcnkgPT4gWyAwLi45LCAnYScuLidmJyBdLCAjIGhleGFkZWNpbWFsCiAgICAgICAgKTsKCnJldHVybnMKCiAgICAkU3RyaW5nID0gJzlmZWM2M2QzNzA3OGZlNzJmNTc5OGQyMDg0ZmVhOGFkJzsKCgo9Y3V0CgpzdWIgR2VuZXJhdGVSYW5kb21TdHJpbmcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGVuZ3RoID0gJFBhcmFte0xlbmd0aH0gfHwgMTY7CgogICAgIyBUaGUgc3RhbmRhcmQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIHRoZSBkaWN0aW9uYXJ5LiBEb24ndCB1c2Ugc3BlY2lhbCBjaGFycyBoZXJlLgogICAgbXkgQERpY3Rpb25hcnlDaGFycyA9ICggMCAuLiA5LCAnQScgLi4gJ1onLCAnYScgLi4gJ3onICk7CgogICAgIyBvdmVycmlkZSBkaWN0aW9uYXJ5IHdpdGggY3VzdG9tIGxpc3QgaWYgZ2l2ZW4KICAgIGlmICggJFBhcmFte0RpY3Rpb25hcnl9ICYmIHJlZiAkUGFyYW17RGljdGlvbmFyeX0gZXEgJ0FSUkFZJyApIHsKICAgICAgICBARGljdGlvbmFyeUNoYXJzID0gQHsgJFBhcmFte0RpY3Rpb25hcnl9IH07CiAgICB9CgogICAgbXkgJERpY3Rpb25hcnlMZW5ndGggPSBzY2FsYXIgQERpY3Rpb25hcnlDaGFyczsKCiAgICAjIGdlbmVyYXRlIHRoZSBzdHJpbmcKICAgIG15ICRTdHJpbmc7CgogICAgZm9yIG15ICRJbmRleCAoIDEgLi4gJExlbmd0aCApIHsKCiAgICAgICAgbXkgJEtleSA9IGludCBNYXRoOjpSYW5kb206OlNlY3VyZTo6cmFuZCAkRGljdGlvbmFyeUxlbmd0aDsKCiAgICAgICAgJFN0cmluZyAuPSAkRGljdGlvbmFyeUNoYXJzWyRLZXldOwogICAgfQoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9Y3V0CgpzdWIgX0R1bXAgewogICAgbXkgKCAkU2VsZiwgJERhdGEgKSA9IEBfOwoKICAgICMgZGF0YSBpcyBub3QgYSByZWZlcmVuY2UKICAgIGlmICggIXJlZiAkeyREYXRhfSApIHsKICAgICAgICBFbmNvZGU6Ol91dGY4X29mZiggJHskRGF0YX0gKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGF0YSBpcyBhIHNjYWxhciByZWZlcmVuY2UKICAgIGlmICggcmVmICR7JERhdGF9IGVxICdTQ0FMQVInICkgewoKICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICRTZWxmLT5fRHVtcCggJHskRGF0YX0gKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGF0YSBpcyBhIGhhc2ggcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkeyREYXRhfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICR7JERhdGF9IH0gKSB7CiAgICAgICAgICAgIG5leHQgS0VZIGlmICFkZWZpbmVkICR7JERhdGF9LT57JEtleX07CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAkU2VsZi0+X0R1bXAoIFwkeyREYXRhfS0+eyRLZXl9ICk7CgogICAgICAgICAgICBteSAkS2V5TmV3ID0gJEtleTsKCiAgICAgICAgICAgICRTZWxmLT5fRHVtcCggXCRLZXlOZXcgKTsKCiAgICAgICAgICAgIGlmICggJEtleSBuZSAkS2V5TmV3ICkgewoKICAgICAgICAgICAgICAgICR7JERhdGF9LT57JEtleU5ld30gPSAkeyREYXRhfS0+eyRLZXl9OwogICAgICAgICAgICAgICAgZGVsZXRlICR7JERhdGF9LT57JEtleX07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRhdGEgaXMgYSBhcnJheSByZWZlcmVuY2UKICAgIGlmICggcmVmICR7JERhdGF9IGVxICdBUlJBWScgKSB7CiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggMCAuLiAkI3sgJHskRGF0YX0gfSApIHsKICAgICAgICAgICAgbmV4dCBLRVkgaWYgIWRlZmluZWQgJHskRGF0YX0tPlskS2V5XTsKCiAgICAgICAgICAgICMgc3RhcnQgcmVjdXJzaW9uCiAgICAgICAgICAgICRTZWxmLT5fRHVtcCggXCR7JERhdGF9LT5bJEtleV0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRhdGEgaXMgYSByZWYgcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkeyREYXRhfSBlcSAnUkVGJyApIHsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAkU2VsZi0+X0R1bXAoICR7JERhdGF9ICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRhdGEgaXMgYSBKU09OOjpQUDo6Qm9vbGVhbgogICAgaWYgKCByZWYgJHskRGF0YX0gZXEgJ0pTT046OlBQOjpCb29sZWFuJyApIHsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAkU2VsZi0+X0R1bXAoICR7JERhdGF9ICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgIE1lc3NhZ2UgID0+ICJVbmtub3duIHJlZiAnIiAuIHJlZiggJHskRGF0YX0gKSAuICInISIsCiAgICApOwoKICAgIHJldHVybjsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0CgAAAAAAAAAAMXYAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					25,
-					1,
-					"revert",
-					null,
-					"AwAAAAAAAAAAAAAAAAAAAAAAAAAxdgAAIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpabnVueTo6UGVybDo6RHVtcGVyKQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46OlpudW55OjpQZXJsOjpSZXF1aXJlKQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIERpZ2VzdDo6TUQ1IHF3KG1kNV9oZXgpOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgRmlsZTo6c3RhdDsKdXNlIFVuaWNvZGU6Ok5vcm1hbGl6ZTsKdXNlIExpc3Q6OlV0aWwgcXcoKTsKdXNlIEZjbnRsIHF3KDpmbG9jayk7CnVzZSBFbmNvZGU7CnVzZSBNYXRoOjpSYW5kb206OlNlY3VyZSBxdygpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzU3RyaW5nV2l0aERhdGEpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkVuY29kZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6TWFpbiAtIG1haW4gb2JqZWN0Cgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBtYWluIGZ1bmN0aW9ucyB0byBsb2FkIG1vZHVsZXMsIGRpZSwgYW5kIGhhbmRsZSBmaWxlcy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBuZXcgb2JqZWN0LiBEbyBub3QgdXNlIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIHVzZToKCiAgICBteSAkTWFpbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJlcXVpcmUoKQoKcmVxdWlyZS9sb2FkIGEgbW9kdWxlCgogICAgbXkgJExvYWRlZCA9ICRNYWluT2JqZWN0LT5SZXF1aXJlKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RXhhbXBsZScsCiAgICAgICAgU2lsZW50ID0+IDEsICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIG5vIGxvZyBlbnRyeSBpZiBtb2R1bGUgd2FzIG5vdCBmb3VuZAogICAgKTsKCj1jdXQKCnN1YiBSZXF1aXJlIHsKICAgIG15ICggJFNlbGYsICRNb2R1bGUsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhJE1vZHVsZSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgbW9kdWxlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZXZhbCB7CiAgICAgICAgbXkgJEZpbGVOYW1lID0gJE1vZHVsZSA9fiBzezo6fXsvfXNteGdyOwogICAgICAgIHJlcXVpcmUgJEZpbGVOYW1lIC4gJy5wbSc7CiAgICB9OwoKICAgICMgSGFuZGxlIGVycm9ycy4KICAgIGlmICgkQCkgewoKICAgICAgICBpZiAoICEkUGFyYW17U2lsZW50fSApIHsKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAkQDsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBDYWxsZXIgICA9PiAxLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgUmVxdWlyZUJhc2VDbGFzcygpCgpyZXF1aXJlL2xvYWQgYSBtb2R1bGUgYW5kIGFkZCBpdCBhcyBhIGJhc2UgY2xhc3MgdG8gdGhlCmNhbGxpbmcgcGFja2FnZSwgaWYgbm90IGFscmVhZHkgcHJlc2VudCAodGhpcyBjaGVjayBpcyBuZWVkZWQKZm9yIHBlcnNpc3RlbnQgZW52aXJvbm1lbnRzKS4KCiAgICBteSAkTG9hZGVkID0gJE1haW5PYmplY3QtPlJlcXVpcmVCYXNlQ2xhc3MoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpFeGFtcGxlJywKICAgICk7Cgo9Y3V0CgpzdWIgUmVxdWlyZUJhc2VDbGFzcyB7CiAgICBteSAoICRTZWxmLCAkTW9kdWxlICkgPSBAXzsKCiAgICAjIExvYWQgdGhlIG1vZHVsZSwgaWYgbm90IGFscmVhZHkgbG9hZGVkLgogICAgcmV0dXJuIGlmICEkU2VsZi0+UmVxdWlyZSgkTW9kdWxlKTsKCiAgICBubyBzdHJpY3QgJ3JlZnMnOyAgICAjIyBubyBjcml0aWMKICAgIG15ICRDYWxsaW5nQ2xhc3MgPSBjYWxsZXIoMCk7CgogICAgIyBDaGVjayBpZiB0aGUgYmFzZSBjbGFzcyB3YXMgYWxyZWFkeSBsb2FkZWQuCiAgICAjIFRoaXMgY2FuIGhhcHBlbiBpbiBwZXJzaXN0ZW50IGVudmlyb25tZW50cyBhcyBtb2RfcGVybCAoc2VlIGJ1ZyM5Njg2KS4KICAgIGlmICggTGlzdDo6VXRpbDo6Zmlyc3QgeyAkXyBlcSAkTW9kdWxlIH0gQHsiJHtDYWxsaW5nQ2xhc3N9OjpJU0EifSApIHsKICAgICAgICByZXR1cm4gMTsgICAgIyBub3RoaW5nIHRvIGRvIG5vdwogICAgfQoKICAgIHB1c2ggQHsiJHtDYWxsaW5nQ2xhc3N9OjpJU0EifSwgJE1vZHVsZTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIERpZSgpCgp0byBkaWUKCiAgICAkTWFpbk9iamVjdC0+RGllKCdzb21lIG1lc3NhZ2UgdG8gZGllJyk7Cgo9Y3V0CgpzdWIgRGllIHsKICAgIG15ICggJFNlbGYsICRNZXNzYWdlICkgPSBAXzsKCiAgICAkTWVzc2FnZSA9ICRNZXNzYWdlIHx8ICdEaWVkISc7CgogICAgIyBsb2cgbWVzc2FnZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgQ2FsbGVyICAgPT4gMSwKICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgKTsKCiAgICBleGl0Owp9Cgo9aGVhZDIgRmlsZW5hbWVDbGVhblVwKCkKCnRvIGNsZWFuIHVwIGZpbGVuYW1lcyB3aGljaCBjYW4gYmUgdXNlZCBpbiBhbnkgY2FzZSAoYWxzbyBxdW90aW5nIGlzIGRvbmUpCgogICAgbXkgJEZpbGVuYW1lID0gJE1haW5PYmplY3QtPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICBGaWxlbmFtZSA9PiAnbWVfdG8vYWxhbC54bWwnLAogICAgICAgIFR5cGUgICAgID0+ICdMb2NhbCcsICMgTG9jYWx8QXR0YWNobWVudHxNRDUKICAgICk7CgogICAgbXkgJEZpbGVuYW1lID0gJE1haW5PYmplY3QtPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICBGaWxlbmFtZSA9PiAnc29tZTpmaWxlLnhtbCcsCiAgICAgICAgVHlwZSAgICAgPT4gJ01ENScsICMgTG9jYWx8QXR0YWNobWVudHxNRDUKICAgICk7Cgo9Y3V0CgpzdWIgRmlsZW5hbWVDbGVhblVwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte0ZpbGVuYW1lfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBGaWxlbmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZXNjYXBlIGlmIGNsZWFudXAgaXMgbm90IG5lZWRlZAogICAgaWYgKCAkUGFyYW17Tm9GaWxlbmFtZUNsZWFufSApIHsKICAgICAgICByZXR1cm4gJFBhcmFte0ZpbGVuYW1lfTsKICAgIH0KCiAgICBteSAkVHlwZSA9IGxjKCAkUGFyYW17VHlwZX0gfHwgJ2xvY2FsJyApOwoKICAgIGlmICggJFR5cGUgZXEgJ21kNScgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVuY29kZScpLT5FbmNvZGVPdXRwdXQoIFwkUGFyYW17RmlsZW5hbWV9ICk7CiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9IG1kNV9oZXgoICRQYXJhbXtGaWxlbmFtZX0gKTsKICAgIH0KCiAgICAjIHJlcGxhY2UgaW52YWxpZCB0b2tlbiBmb3IgYXR0YWNobWVudCBmaWxlIG5hbWVzCiAgICBlbHNpZiAoICRUeXBlIGVxICdhdHRhY2htZW50JyApIHsKCiAgICAgICAgIyB0cmltIHdoaXRlc3BhY2UKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvXlxzK3xccnxcbnxccyskLy9nOwoKICAgICAgICAjIHN0cmlwIGxlYWRpbmcgZG90cwogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy9eXC4rLy87CgogICAgICAgICMgb25seSB3aGl0ZWxpc3RlZCBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gZmlsZW5hbWUgZm9yIHNlY3VyaXR5CiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9fiBzL1teXHdcLSsuI19dL18vZzsKCiAgICAgICAgIyBFbmNsb3NlZCBhbHBoYW51bWVyaWNzIGFyZSBrZXB0IG9uIG9sZGVyIFBlcmwgdmVyc2lvbnMsIG1ha2Ugc3VyZSB0byByZXBsYWNlIHRoZW0gdG9vLgogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy9bXHh7MjQ2MH0tXHh7MjRGRn1dL18vZzsKCiAgICAgICAgIyByZXBsYWNlIHV0ZjggYW5kIGlzbwogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy8oXHh7MDBDM31ceHswMEE0fXxceHswMEE0fSkvYWUvZzsKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvKFx4ezAwQzN9XHh7MDBCNn18XHh7MDBCNn0pL29lL2c7CiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9fiBzLyhceHswMEMzfVx4ezAwQkN9fFx4ezAwRkN9KS91ZS9nOwogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy8oXHh7MDBDM31ceHswMDlGfXxceHswMEM0fSkvQWUvZzsKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvKFx4ezAwQzN9XHh7MDA5Nn18XHh7MDA5Nn0pL09lL2c7CiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9fiBzLyhceHswMEMzfVx4ezAwOUN9fFx4ezAwOUN9KS9VZS9nOwogICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPX4gcy8oXHh7MDBDM31ceHswMDlGfXxceHswMERGfSkvc3MvZzsKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvLSsvLS9nOwoKICAgICAgICAjIHNlcGFyYXRlIGZpbGVuYW1lIGFuZCBleHRlbnNpb24KICAgICAgICBteSAkRmlsZU5hbWUgPSAkUGFyYW17RmlsZW5hbWV9OwogICAgICAgIG15ICRGaWxlRXh0ICA9ICcnOwogICAgICAgIGlmICggJFBhcmFte0ZpbGVuYW1lfSA9fiAvKC4qKVwuKyhbXi5dKykkLyApIHsKICAgICAgICAgICAgJEZpbGVOYW1lID0gJDE7CiAgICAgICAgICAgICRGaWxlRXh0ICA9ICcuJyAuICQyOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBsZW5ndGggJEZpbGVOYW1lICkgewogICAgICAgICAgICBteSAkTW9kaWZpZWROYW1lID0gJEZpbGVOYW1lIC4gJEZpbGVFeHQ7CgogICAgICAgICAgICB3aGlsZSAoIGxlbmd0aCBlbmNvZGUoICdVVEYtOCcsICRNb2RpZmllZE5hbWUgKSA+IDIyMCApIHsKCiAgICAgICAgICAgICAgICAjIFJlbW92ZSBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZW5hbWUgc3RyaW5nCiAgICAgICAgICAgICAgICAjICAgdW50aWwgd2UgZ2V0IGFjY2VwdGFibGUgMjIwIGJ5dGUgbG9uZyBmaWxlbmFtZSBzaXplIGluY2x1ZGluZyBleHRlbnNpb24uCiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCAkRmlsZU5hbWUgPiAxICkgewogICAgICAgICAgICAgICAgICAgIGNob3AgJEZpbGVOYW1lOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgSWYgd2UgcmVhY2hlZCBtaW5pbXVtIGZpbGVuYW1lIGxlbmd0aCwgcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSB0aGUgZW5kIG9mIHRoZSBleHRlbnNpb24gc3RyaW5nLgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY2hvcCAkRmlsZUV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTW9kaWZpZWROYW1lID0gJEZpbGVOYW1lIC4gJEZpbGVFeHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9ICRNb2RpZmllZE5hbWU7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgdHJpbSB3aGl0ZXNwYWNlCiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9fiBzL15ccyt8XHJ8XG58XHMrJC8vZzsKCiAgICAgICAgIyBzdHJpcCBsZWFkaW5nIGRvdHMKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvXlwuKy8vOwoKICAgICAgICAjIG9ubHkgd2hpdGVsaXN0ZWQgY2hhcmFjdGVycyBhbGxvd2VkIGluIGZpbGVuYW1lIGZvciBzZWN1cml0eQogICAgICAgIGlmICggISRQYXJhbXtOb1JlcGxhY2V9ICkgewogICAgICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvW15cd1wtKy4jX10vXy9nOwoKICAgICAgICAgICAgIyBFbmNsb3NlZCBhbHBoYW51bWVyaWNzIGFyZSBrZXB0IG9uIG9sZGVyIFBlcmwgdmVyc2lvbnMsIG1ha2Ugc3VyZSB0byByZXBsYWNlIHRoZW0gdG9vLgogICAgICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID1+IHMvW1x4ezI0NjB9LVx4ezI0RkZ9XS9fL2c7CiAgICAgICAgfQoKICAgICAgICAjIHNlcGFyYXRlIGZpbGVuYW1lIGFuZCBleHRlbnNpb24KICAgICAgICBteSAkRmlsZU5hbWUgPSAkUGFyYW17RmlsZW5hbWV9OwogICAgICAgIG15ICRGaWxlRXh0ICA9ICcnOwogICAgICAgIGlmICggJFBhcmFte0ZpbGVuYW1lfSA9fiAvKC4qKVwuKyhbXi5dKykkLyApIHsKICAgICAgICAgICAgJEZpbGVOYW1lID0gJDE7CiAgICAgICAgICAgICRGaWxlRXh0ICA9ICcuJyAuICQyOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBsZW5ndGggJEZpbGVOYW1lICkgewogICAgICAgICAgICBteSAkTW9kaWZpZWROYW1lID0gJEZpbGVOYW1lIC4gJEZpbGVFeHQ7CgogICAgICAgICAgICB3aGlsZSAoIGxlbmd0aCBlbmNvZGUoICdVVEYtOCcsICRNb2RpZmllZE5hbWUgKSA+IDIyMCApIHsKCiAgICAgICAgICAgICAgICAjIFJlbW92ZSBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZW5hbWUgc3RyaW5nCiAgICAgICAgICAgICAgICAjICAgdW50aWwgd2UgZ2V0IGFjY2VwdGFibGUgMjIwIGJ5dGUgbG9uZyBmaWxlbmFtZSBzaXplIGluY2x1ZGluZyBleHRlbnNpb24uCiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCAkRmlsZU5hbWUgPiAxICkgewogICAgICAgICAgICAgICAgICAgIGNob3AgJEZpbGVOYW1lOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgSWYgd2UgcmVhY2hlZCBtaW5pbXVtIGZpbGVuYW1lIGxlbmd0aCwgcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSB0aGUgZW5kIG9mIHRoZSBleHRlbnNpb24gc3RyaW5nLgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY2hvcCAkRmlsZUV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTW9kaWZpZWROYW1lID0gJEZpbGVOYW1lIC4gJEZpbGVFeHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRQYXJhbXtGaWxlbmFtZX0gPSAkTW9kaWZpZWROYW1lOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBhcmFte0ZpbGVuYW1lfTsKfQoKPWhlYWQyIEZpbGVSZWFkKCkKCnRvIHJlYWQgZmlsZXMgZnJvbSBmaWxlIHN5c3RlbQoKICAgIG15ICRDb250ZW50U0NBTEFSUmVmID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAnYzpcc29tZVxsb2NhdGlvbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdmaWxlMnJlYWQudHh0JywKICAgICAgICAjIG9yIExvY2F0aW9uCiAgICAgICAgTG9jYXRpb24gID0+ICdjOlxzb21lXGxvY2F0aW9uXGZpbGUycmVhZC50eHQnLAogICAgKTsKCiAgICBteSAkQ29udGVudEFSUkFZUmVmID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAnYzpcc29tZVxsb2NhdGlvbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdmaWxlMnJlYWQudHh0JywKICAgICAgICAjIG9yIExvY2F0aW9uCiAgICAgICAgTG9jYXRpb24gID0+ICdjOlxzb21lXGxvY2F0aW9uXGZpbGUycmVhZC50eHQnLAoKICAgICAgICBSZXN1bHQgICAgPT4gJ0FSUkFZJywgIyBvcHRpb25hbCAtIFNDQUxBUnxBUlJBWQogICAgKTsKCiAgICBteSAkQ29udGVudFNDQUxBUlJlZiA9ICRNYWluT2JqZWN0LT5GaWxlUmVhZCgKICAgICAgICBEaXJlY3RvcnkgICAgICAgPT4gJ2M6XHNvbWVcbG9jYXRpb24nLAogICAgICAgIEZpbGVuYW1lICAgICAgICA9PiAnZmlsZTJyZWFkLnR4dCcsCiAgICAgICAgIyBvciBMb2NhdGlvbgogICAgICAgIExvY2F0aW9uICAgICAgICA9PiAnYzpcc29tZVxsb2NhdGlvblxmaWxlMnJlYWQudHh0JywKCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdiaW5tb2RlJywgIyBvcHRpb25hbCAtIGJpbm1vZGV8dXRmOAogICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLCAgICMgb3B0aW9uYWwgLSBMb2NhbHxBdHRhY2htZW50fE1ENQogICAgICAgIFJlc3VsdCAgICAgICAgICA9PiAnU0NBTEFSJywgICMgb3B0aW9uYWwgLSBTQ0FMQVJ8QVJSQVkKICAgICAgICBEaXNhYmxlV2FybmluZ3MgPT4gMSwgICAgICAgICAjIG9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIEZpbGVSZWFkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEZIOwogICAgaWYgKCAkUGFyYW17RmlsZW5hbWV9ICYmICRQYXJhbXtEaXJlY3Rvcnl9ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9ICRTZWxmLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgICAgIEZpbGVuYW1lID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgICAgIFR5cGUgICAgID0+ICRQYXJhbXtUeXBlfSB8fCAnTG9jYWwnLCAgICAjIExvY2FsfEF0dGFjaG1lbnR8TUQ1CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17TG9jYXRpb259ID0gIiRQYXJhbXtEaXJlY3Rvcnl9LyRQYXJhbXtGaWxlbmFtZX0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TG9jYXRpb259ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0xvY2F0aW9ufSA9fiBzey8vfXsvfXhtc2c7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgRmlsZW5hbWUgYW5kIERpcmVjdG9yeSBvciBMb2NhdGlvbiEnLAogICAgICAgICk7CgogICAgfQoKICAgICMgc2V0IG9wZW4gbW9kZQogICAgbXkgJE1vZGUgPSAnPCc7CiAgICBpZiAoICRQYXJhbXtNb2RlfSAmJiAkUGFyYW17TW9kZX0gPX4gbXsgXEEgdXRmLT84IFx6IH14bXNpICkgewogICAgICAgICRNb2RlID0gJzw6dXRmOCc7CiAgICB9CgogICAgIyByZXR1cm4gaWYgZmlsZSBjYW4gbm90IG9wZW4KICAgIGlmICggIW9wZW4gJEZILCAkTW9kZSwgJFBhcmFte0xvY2F0aW9ufSApIHsgICAgIyMgbm8gY3JpdGljCiAgICAgICAgbXkgJEVycm9yID0gJCE7CgogICAgICAgIGlmICggISRQYXJhbXtEaXNhYmxlV2FybmluZ3N9ICkgewoKICAgICAgICAgICAgIyBDaGVjayBpZiBmaWxlIGV4aXN0cyBvbmx5IGlmIHN5c3RlbSB3YXMgbm90IGFibGUgdG8gb3BlbiBpdCAodG8gZ2V0IGJldHRlciBlcnJvciBtZXNzYWdlKS4KICAgICAgICAgICAgaWYgKCAhLWUgJFBhcmFte0xvY2F0aW9ufSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZpbGUgJyRQYXJhbXtMb2NhdGlvbn0nIGRvZXNuJ3QgZXhpc3QhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBvcGVuICckUGFyYW17TG9jYXRpb259JzogJEVycm9yIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9jayBmaWxlIChTaGFyZWQgTG9jaykKICAgIGlmICggIWZsb2NrICRGSCwgTE9DS19TSCApIHsKICAgICAgICBpZiAoICEkUGFyYW17RGlzYWJsZVdhcm5pbmdzfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGxvY2sgJyRQYXJhbXtMb2NhdGlvbn0nOiAkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZW5hYmxlIGJpbm1vZGUKICAgIGlmICggISRQYXJhbXtNb2RlfSB8fCAkUGFyYW17TW9kZX0gPX4gbXsgXEEgYmlubW9kZSB9eG1zaSApIHsKICAgICAgICBiaW5tb2RlICRGSDsKICAgIH0KCiAgICAjIHJlYWQgZmlsZSBhcyBhcnJheQogICAgaWYgKCAkUGFyYW17UmVzdWx0fSAmJiAkUGFyYW17UmVzdWx0fSBlcSAnQVJSQVknICkgewoKICAgICAgICAjIHJlYWQgZmlsZSBjb250ZW50IGF0IG9uY2UKICAgICAgICBteSBAQXJyYXkgPSA8JEZIPjsKICAgICAgICBjbG9zZSAkRkg7CgogICAgICAgIHJldHVybiBcQEFycmF5OwogICAgfQoKICAgICMgcmVhZCBmaWxlIGFzIHN0cmluZwogICAgbXkgJFN0cmluZyA9IGRvIHsgbG9jYWwgJC87IDwkRkg+IH07CiAgICBjbG9zZSAkRkg7CgogICAgcmV0dXJuIFwkU3RyaW5nOwp9Cgo9aGVhZDIgRmlsZVdyaXRlKCkKCnRvIHdyaXRlIGRhdGEgdG8gZmlsZSBzeXN0ZW0KCiAgICBteSAkRmlsZUxvY2F0aW9uID0gJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICBEaXJlY3RvcnkgPT4gJ2M6XHNvbWVcbG9jYXRpb24nLAogICAgICAgIEZpbGVuYW1lICA9PiAnZmlsZTJ3cml0ZS50eHQnLAogICAgICAgICMgb3IgTG9jYXRpb24KICAgICAgICBMb2NhdGlvbiAgPT4gJ2M6XHNvbWVcbG9jYXRpb25cZmlsZTJ3cml0ZS50eHQnLAoKICAgICAgICBDb250ZW50ICAgPT4gXCRDb250ZW50LAogICAgKTsKCiAgICBteSAkRmlsZUxvY2F0aW9uID0gJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICBEaXJlY3RvcnkgID0+ICdjOlxzb21lXGxvY2F0aW9uJywKICAgICAgICBGaWxlbmFtZSAgID0+ICdmaWxlMndyaXRlLnR4dCcsCiAgICAgICAgIyBvciBMb2NhdGlvbgogICAgICAgIExvY2F0aW9uICAgPT4gJ2M6XHNvbWVcbG9jYXRpb25cZmlsZTJ3cml0ZS50eHQnLAoKICAgICAgICBDb250ZW50ICAgID0+IFwkQ29udGVudCwKICAgICAgICBNb2RlICAgICAgID0+ICdiaW5tb2RlJywgIyBiaW5tb2RlfHV0ZjgKICAgICAgICBUeXBlICAgICAgID0+ICdMb2NhbCcsICAgIyBvcHRpb25hbCAtIExvY2FsfEF0dGFjaG1lbnR8TUQ1CiAgICAgICAgUGVybWlzc2lvbiA9PiAnNjQ0JywgICAgICMgb3B0aW9uYWwgLSB1bml4IGZpbGUgcGVybWlzc2lvbnMKICAgICk7CgpQbGF0Zm9ybSBub3RlOiBNYWNPUyAoSEZTKykgc3RvcmVzIGZpbGVuYW1lcyBhcyBVbmljb2RlIEM8TkZEPiBpbnRlcm5hbGx5LAphbmQgRGlyZWN0b3J5UmVhZCgpIHdpbGwgYWxzbyByZXBvcnQgdGhlbSBhcyBDPE5GRD4uCgo9Y3V0CgpzdWIgRmlsZVdyaXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAkUGFyYW17RmlsZW5hbWV9ICYmICRQYXJhbXtEaXJlY3Rvcnl9ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0ZpbGVuYW1lfSA9ICRTZWxmLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgICAgIEZpbGVuYW1lICAgICAgICA9PiAkUGFyYW17RmlsZW5hbWV9LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJFBhcmFte1R5cGV9IHx8ICdMb2NhbCcsICAgICMgTG9jYWx8QXR0YWNobWVudHxNRDUKICAgICAgICAgICAgTm9GaWxlbmFtZUNsZWFuID0+ICRQYXJhbXtOb0ZpbGVuYW1lQ2xlYW59LAogICAgICAgICAgICBOb1JlcGxhY2UgICAgICAgPT4gJFBhcmFte05vUmVwbGFjZX0sCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17TG9jYXRpb259ID0gIiRQYXJhbXtEaXJlY3Rvcnl9LyRQYXJhbXtGaWxlbmFtZX0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TG9jYXRpb259ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0xvY2F0aW9ufSA9fiBzL1wvXC8vXC8vZzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBGaWxlbmFtZSBhbmQgRGlyZWN0b3J5IG9yIExvY2F0aW9uIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBvcGVuIG1vZGUgKGlmIGZpbGUgZXhpc3RzLCBsb2NrIGl0IG9uIG9wZW4sIGRvbmUgYnkgJys8JykKICAgIG15ICRFeGlzdHM7CiAgICBpZiAoIC1mICRQYXJhbXtMb2NhdGlvbn0gKSB7CiAgICAgICAgJEV4aXN0cyA9IDE7CiAgICB9CiAgICBteSAkTW9kZSA9ICc+JzsKICAgIGlmICgkRXhpc3RzKSB7CiAgICAgICAgJE1vZGUgPSAnKzwnOwogICAgfQogICAgaWYgKCAkUGFyYW17TW9kZX0gJiYgJFBhcmFte01vZGV9ID1+IC9eKHV0Zjh8dXRmXC04KS9pICkgewogICAgICAgICRNb2RlID0gJz46dXRmOCc7CiAgICAgICAgaWYgKCRFeGlzdHMpIHsKICAgICAgICAgICAgJE1vZGUgPSAnKzw6dXRmOCc7CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIGlmIGZpbGUgY2FuIG5vdCBvcGVuCiAgICBteSAkRkg7CiAgICBpZiAoICFvcGVuICRGSCwgJE1vZGUsICRQYXJhbXtMb2NhdGlvbn0gKSB7ICAgICMjIG5vIGNyaXRpYwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3Qgd3JpdGUgJyRQYXJhbXtMb2NhdGlvbn0nOiAkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb2NrIGZpbGUgKEV4Y2x1c2l2ZSBMb2NrKQogICAgaWYgKCAhZmxvY2sgJEZILCBMT0NLX0VYICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgbG9jayAnJFBhcmFte0xvY2F0aW9ufSc6ICQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgZW1wdHkgZmlsZSBmaXJzdCAobmVlZGVkIGlmIGZpbGUgaXMgb3BlbiBieSAnKzwnKQogICAgdHJ1bmNhdGUgJEZILCAwOwoKICAgICMgZW5hYmxlIGJpbm1vZGUKICAgIGlmICggISRQYXJhbXtNb2RlfSB8fCBsYyAkUGFyYW17TW9kZX0gZXEgJ2Jpbm1vZGUnICkgewoKICAgICAgICAjIG1ha2Ugc3VyZSwgdGhhdCBubyB1dGY4IHN0YW1wIGV4aXN0cyAob3RoZXJ3YXkgcGVybCB3aWxsIGRvIGF1dG8gY29udmVydCB0byBpc28pCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVuY29kZScpLT5FbmNvZGVPdXRwdXQoICRQYXJhbXtDb250ZW50fSApOwoKICAgICAgICAjIHNldCBmaWxlIGhhbmRsZSB0byBiaW5tb2RlCiAgICAgICAgYmlubW9kZSAkRkg7CiAgICB9CgogICAgIyB3cml0ZSBmaWxlIGlmIGNvbnRlbnQgaXMgbm90IHVuZGVmCiAgICBpZiAoIGRlZmluZWQgJHsgJFBhcmFte0NvbnRlbnR9IH0gKSB7CiAgICAgICAgcHJpbnQgJEZIICR7ICRQYXJhbXtDb250ZW50fSB9OwogICAgfQoKICAgICMgd3JpdGUgZW1wdHkgZmlsZSBpZiBjb250ZW50IGlzIHVuZGVmCiAgICBlbHNlIHsKICAgICAgICBwcmludCAkRkggJyc7CiAgICB9CgogICAgIyBjbG9zZSB0aGUgZmlsZWhhbmRsZQogICAgY2xvc2UgJEZIOwoKICAgICMgc2V0IHBlcm1pc3Npb24KICAgIGlmICggJFBhcmFte1Blcm1pc3Npb259ICkgewogICAgICAgIGlmICggbGVuZ3RoICRQYXJhbXtQZXJtaXNzaW9ufSA9PSAzICkgewogICAgICAgICAgICAkUGFyYW17UGVybWlzc2lvbn0gPSAiMCRQYXJhbXtQZXJtaXNzaW9ufSI7CiAgICAgICAgfQogICAgICAgIGNobW9kKCBvY3QoICRQYXJhbXtQZXJtaXNzaW9ufSApLCAkUGFyYW17TG9jYXRpb259ICk7CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtGaWxlbmFtZX0gaWYgJFBhcmFte0ZpbGVuYW1lfTsKICAgIHJldHVybiAkUGFyYW17TG9jYXRpb259Owp9Cgo9aGVhZDIgRmlsZURlbGV0ZSgpCgp0byBkZWxldGUgYSBmaWxlIGZyb20gZmlsZSBzeXN0ZW0KCiAgICBteSAkU3VjY2VzcyA9ICRNYWluT2JqZWN0LT5GaWxlRGVsZXRlKAogICAgICAgIERpcmVjdG9yeSAgICAgICA9PiAnYzpcc29tZVxsb2NhdGlvbicsCiAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdtZV90by9hbGFsLnhtbCcsCiAgICAgICAgIyBvciBMb2NhdGlvbgogICAgICAgIExvY2F0aW9uICAgICAgICA9PiAnYzpcc29tZVxsb2NhdGlvblxtZV90b1xhbGFsLnhtbCcsCgogICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLCAgICMgb3B0aW9uYWwgLSBMb2NhbHxBdHRhY2htZW50fE1ENQogICAgICAgIERpc2FibGVXYXJuaW5ncyA9PiAxLCAjIG9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIEZpbGVEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICRQYXJhbXtGaWxlbmFtZX0gJiYgJFBhcmFte0RpcmVjdG9yeX0gKSB7CgogICAgICAgICMgZmlsZW5hbWUgY2xlYW4gdXAKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID0gJFNlbGYtPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICAgICAgRmlsZW5hbWUgID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgICAgIFR5cGUgICAgICA9PiAkUGFyYW17VHlwZX0gfHwgJ0xvY2FsJywgICAgIyBMb2NhbHxBdHRhY2htZW50fE1ENQogICAgICAgICAgICBOb1JlcGxhY2UgPT4gJFBhcmFte05vUmVwbGFjZX0sCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17TG9jYXRpb259ID0gIiRQYXJhbXtEaXJlY3Rvcnl9LyRQYXJhbXtGaWxlbmFtZX0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TG9jYXRpb259ICkgewoKICAgICAgICAjIGZpbGVuYW1lIGNsZWFuIHVwCiAgICAgICAgJFBhcmFte0xvY2F0aW9ufSA9fiBzL1wvXC8vXC8vZzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBGaWxlbmFtZSBhbmQgRGlyZWN0b3J5IG9yIExvY2F0aW9uIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRyeSB0byBkZWxldGUgZmlsZQogICAgaWYgKCAhdW5saW5rKCAkUGFyYW17TG9jYXRpb259ICkgKSB7CiAgICAgICAgbXkgJEVycm9yID0gJCE7CgogICAgICAgIGlmICggISRQYXJhbXtEaXNhYmxlV2FybmluZ3N9ICkgewoKICAgICAgICAgICAgIyBDaGVjayBpZiBmaWxlIGV4aXN0cyBvbmx5IGluIGNhc2UgdGhhdCBkZWxldGUgZmFpbGVkLgogICAgICAgICAgICBpZiAoICEtZSAkUGFyYW17TG9jYXRpb259ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRmlsZSAnJFBhcmFte0xvY2F0aW9ufScgZG9lc24ndCBleGlzdCEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGRlbGV0ZSAnJFBhcmFte0xvY2F0aW9ufSc6ICRFcnJvciIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBGaWxlR2V0TVRpbWUoKQoKZ2V0IHRpbWVzdGFtcCBvZiBmaWxlIGNoYW5nZSB0aW1lCgogICAgbXkgJEZpbGVNVGltZSA9ICRNYWluT2JqZWN0LT5GaWxlR2V0TVRpbWUoCiAgICAgICAgRGlyZWN0b3J5ID0+ICdjOlxzb21lXGxvY2F0aW9uJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ21lX3RvL2FsYWwueG1sJywKICAgICAgICAjIG9yIExvY2F0aW9uCiAgICAgICAgTG9jYXRpb24gID0+ICdjOlxzb21lXGxvY2F0aW9uXG1lX3RvXGFsYWwueG1sJwogICAgKTsKCj1jdXQKCnN1YiBGaWxlR2V0TVRpbWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkRkg7CiAgICBpZiAoICRQYXJhbXtGaWxlbmFtZX0gJiYgJFBhcmFte0RpcmVjdG9yeX0gKSB7CgogICAgICAgICMgZmlsZW5hbWUgY2xlYW4gdXAKICAgICAgICAkUGFyYW17RmlsZW5hbWV9ID0gJFNlbGYtPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJFBhcmFte0ZpbGVuYW1lfSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJFBhcmFte1R5cGV9IHx8ICdMb2NhbCcsICAgICMgTG9jYWx8QXR0YWNobWVudHxNRDUKICAgICAgICApOwogICAgICAgICRQYXJhbXtMb2NhdGlvbn0gPSAiJFBhcmFte0RpcmVjdG9yeX0vJFBhcmFte0ZpbGVuYW1lfSI7CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtMb2NhdGlvbn0gKSB7CgogICAgICAgICMgZmlsZW5hbWUgY2xlYW4gdXAKICAgICAgICAkUGFyYW17TG9jYXRpb259ID1+IHN7Ly99ey99eG1zZzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBGaWxlbmFtZSBhbmQgRGlyZWN0b3J5IG9yIExvY2F0aW9uIScsCiAgICAgICAgKTsKCiAgICB9CgogICAgIyBnZXQgZmlsZSBtZXRhZGF0YQogICAgbXkgJFN0YXQgPSBzdGF0KCAkUGFyYW17TG9jYXRpb259ICk7CgogICAgaWYgKCAhJFN0YXQgKSB7CiAgICAgICAgbXkgJEVycm9yID0gJCE7CgogICAgICAgIGlmICggISRQYXJhbXtEaXNhYmxlV2FybmluZ3N9ICkgewoKICAgICAgICAgICAgIyBDaGVjayBpZiBmaWxlIGV4aXN0cyBvbmx5IGlmIHN5c3RlbSB3YXMgbm90IGFibGUgdG8gb3BlbiBpdCAodG8gZ2V0IGJldHRlciBlcnJvciBtZXNzYWdlKS4KICAgICAgICAgICAgaWYgKCAhLWUgJFBhcmFte0xvY2F0aW9ufSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZpbGUgJyRQYXJhbXtMb2NhdGlvbn0nIGRvZXNuJ3QgZXhpc3QhIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbm5vdCBzdGF0IGZpbGUgJyRQYXJhbXtMb2NhdGlvbn0nOiAkRXJyb3IiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRTdGF0LT5tdGltZSgpOwp9Cgo9aGVhZDIgTUQ1c3VtKCkKCmdldCBhbiBDPE1ENT4gc3VtIG9mIGEgZmlsZSBvciBhIHN0cmluZwoKICAgIG15ICRNRDVTdW0gPSAkTWFpbk9iamVjdC0+TUQ1c3VtKAogICAgICAgIEZpbGVuYW1lID0+ICcvcGF0aC90by9tZV90b19hbGFsLnhtbCcsCiAgICApOwoKICAgIG15ICRNRDVTdW0gPSAkTWFpbk9iamVjdC0+TUQ1c3VtKAogICAgICAgIFN0cmluZyA9PiBcJFNvbWVTdHJpbmcsCiAgICApOwoKICAgICMgbm90ZTogbmVlZHMgbW9yZSBtZW1vcnkhCiAgICBteSAkTUQ1U3VtID0gJE1haW5PYmplY3QtPk1ENXN1bSgKICAgICAgICBTdHJpbmcgPT4gJFNvbWVTdHJpbmcsCiAgICApOwoKPWN1dAoKc3ViIE1ENXN1bSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggISRQYXJhbXtGaWxlbmFtZX0gJiYgIWRlZmluZWQoICRQYXJhbXtTdHJpbmd9ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEZpbGVuYW1lIG9yIFN0cmluZyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbWQ1c3VtIGZpbGUKICAgIGlmICggJFBhcmFte0ZpbGVuYW1lfSApIHsKCiAgICAgICAgIyBvcGVuIGZpbGUKICAgICAgICBteSAkRkg7CiAgICAgICAgaWYgKCAhb3BlbiAkRkgsICc8JywgJFBhcmFte0ZpbGVuYW1lfSApIHsgICAgIyMgbm8gY3JpdGljCiAgICAgICAgICAgIG15ICRFcnJvciA9ICQhOwoKICAgICAgICAgICAgIyBDaGVjayBpZiBmaWxlIGV4aXN0cyBvbmx5IGlmIHN5c3RlbSB3YXMgbm90IGFibGUgdG8gb3BlbiBpdCAodG8gZ2V0IGJldHRlciBlcnJvciBtZXNzYWdlKS4KICAgICAgICAgICAgaWYgKCAhLWUgJFBhcmFte0ZpbGVuYW1lfSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZpbGUgJyRQYXJhbXtGaWxlbmFtZX0nIGRvZXNuJ3QgZXhpc3QhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCByZWFkICckUGFyYW17RmlsZW5hbWV9JzogJEVycm9yIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgYmlubW9kZSAkRkg7CiAgICAgICAgbXkgJE1ENXN1bSA9IERpZ2VzdDo6TUQ1LT5uZXcoKS0+YWRkZmlsZSgkRkgpLT5oZXhkaWdlc3QoKTsKICAgICAgICBjbG9zZSAkRkg7CgogICAgICAgIHJldHVybiAkTUQ1c3VtOwogICAgfQoKICAgICMgZ2V0IGVuY29kZSBvYmplY3QKICAgIG15ICRFbmNvZGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RW5jb2RlJyk7CgogICAgIyBtZDVzdW0gc3RyaW5nCiAgICBpZiAoICFyZWYgJFBhcmFte1N0cmluZ30gKSB7CiAgICAgICAgJEVuY29kZU9iamVjdC0+RW5jb2RlT3V0cHV0KCBcJFBhcmFte1N0cmluZ30gKTsKICAgICAgICByZXR1cm4gbWQ1X2hleCggJFBhcmFte1N0cmluZ30gKTsKICAgIH0KCiAgICAjIG1kNXN1bSBzY2FsYXIgcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkUGFyYW17U3RyaW5nfSBlcSAnU0NBTEFSJyApIHsKICAgICAgICAkRW5jb2RlT2JqZWN0LT5FbmNvZGVPdXRwdXQoICRQYXJhbXtTdHJpbmd9ICk7CiAgICAgICAgcmV0dXJuIG1kNV9oZXgoICR7ICRQYXJhbXtTdHJpbmd9IH0gKTsKICAgIH0KCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIGEgU0NBTEFSIHJlZmVyZW5jZSBsaWtlICdTdHJpbmcgPT4gXCRDb250ZW50JyBpbiBTdHJpbmcgcGFyYW0uIiwKICAgICk7CgogICAgcmV0dXJuOwp9Cgo9aGVhZDIgRHVtcCgpCgpkdW1wIHZhcmlhYmxlIHRvIGFuIHN0cmluZwoKICAgIG15ICREdW1wID0gJE1haW5PYmplY3QtPkR1bXAoCiAgICAgICAgJFNvbWVWYXJpYWJsZSwKICAgICk7CgogICAgbXkgJER1bXAgPSAkTWFpbk9iamVjdC0+RHVtcCgKICAgICAgICB7CiAgICAgICAgICAgIEtleTEgPT4gJFNvbWVWYXJpYWJsZSwKICAgICAgICB9LAogICAgKTsKCiAgICBkdW1wIG9ubHkgaW4gYXNjaWkgY2hhcmFjdGVycyAoPiAxMjggd2lsbCBiZSBtYXJrZWQgYXMgXHh7Li59KQoKICAgIG15ICREdW1wID0gJE1haW5PYmplY3QtPkR1bXAoCiAgICAgICAgJFNvbWVWYXJpYWJsZSwKICAgICAgICAnYXNjaWknLCAjIGFzY2lpfGJpbmFyeSAtIGRlZmF1bHQgaXMgYmluYXJ5CiAgICApOwoKPWN1dAoKc3ViIER1bXAgewogICAgbXkgKCAkU2VsZiwgJERhdGEsICRUeXBlICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBkYXRhCiAgICBpZiAoICFkZWZpbmVkICREYXRhICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBcJFN0cmluZyBpbiBEdW1wKCkhIgogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdHlwZQogICAgaWYgKCAhJFR5cGUgKSB7CiAgICAgICAgJFR5cGUgPSAnYmluYXJ5JzsKICAgIH0KICAgIGlmICggJFR5cGUgbmUgJ2FzY2lpJyAmJiAkVHlwZSBuZSAnYmluYXJ5JyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkludmFsaWQgVHlwZSAnJFR5cGUnISIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG1pbGQgcHJldHR5IHByaW50CiAgICAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAxOwoKICAgICMgc29ydCBoYXNoIGtleXMKICAgICREYXRhOjpEdW1wZXI6OlNvcnRrZXlzID0gMTsKCiAgICAjIFRoaXMgRHVtcCgpIGlzIHVzaW5nIERhdGE6OkR1bXBlciB3aXRoIGEgdXRmOCB3b3JrYXJvdW5kcyB0byBoYW5kbGUKICAgICMgdGhlIGJ1ZyBbcnQuY3Bhbi5vcmcgIzI4NjA3XSBEYXRhOjpEdW1wZXI6OkR1bXBlciBpcyBkdW1waW5nIHV0ZjgKICAgICMgc3RyaW5ncyBhcyBsYXRpbjEvOGJpdCBpbnN0ZWFkIG9mIHV0ZjguIFVzZSBTdG9yYWJsZSBtb2R1bGUgdXNlZCBmb3IKICAgICMgd29ya2Fyb3VuZC4KICAgICMgLT4gaHR0cDovL3J0LmNwYW4ub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9Mjg2MDcKICAgIGlmICggJFR5cGUgZXEgJ2JpbmFyeScgKSB7CgogICAgICAgICMgQ2xvbmUgdGhlIGRhdGEgYmVjYXVzZSB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIHV0ZjggZmxhZyBpbiBhbGwKICAgICAgICAjIHJlZmVyZW5jZSB2YXJpYWJsZXMgYW5kIGRvIG5vdCB0byB3YW50IHRvIGRvIHRoaXMgaW4gdGhlIG9yaWcuCiAgICAgICAgIyB2YXJpYWJsZXMgYmVjYXVzZSB0aGV5IHdpbGwgc3RpbGwgdXNlZCBpbiB0aGUgc3lzdGVtLgogICAgICAgIG15ICREYXRhTmV3ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyktPkNsb25lKCBEYXRhID0+IFwkRGF0YSApOwoKICAgICAgICAjIERpc2FibGUgdXRmOCBmbGFnLgogICAgICAgICRTZWxmLT5fRHVtcCgkRGF0YU5ldyk7CgogICAgICAgICMgRHVtcCBpdCBhcyBiaW5hcnkgc3RyaW5ncy4KICAgICAgICBteSAkU3RyaW5nID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoICR7JERhdGFOZXd9ICk7ICAgICMjIG5vIGNyaXRpYwoKICAgICAgICAjIEVuYWJsZSB1dGY4IGZsYWcuCiAgICAgICAgRW5jb2RlOjpfdXRmOF9vbigkU3RyaW5nKTsKCiAgICAgICAgcmV0dXJuICRTdHJpbmc7CiAgICB9CgogICAgIyBmYWxsYmFjayBpZiBTdG9yYWJsZSBjYW4gbm90IGJlIGxvYWRlZAogICAgcmV0dXJuIERhdGE6OkR1bXBlcjo6RHVtcGVyKCREYXRhKTsgICAgICAgICAgICAgICAgICAgICAgIyMgbm8gY3JpdGljCgp9Cgo9aGVhZDIgRGlyZWN0b3J5UmVhZCgpCgpyZWFkcyBhIGRpcmVjdG9yeSBhbmQgcmV0dXJucyBhbiBhcnJheSB3aXRoIHJlc3VsdHMuCgogICAgbXkgQEZpbGVzSW5EaXJlY3RvcnkgPSAkTWFpbk9iamVjdC0+RGlyZWN0b3J5UmVhZCgKICAgICAgICBEaXJlY3RvcnkgPT4gJy90bXAnLAogICAgICAgIEZpbHRlciAgICA9PiAnRmlsZW5hbSonLAogICAgKTsKCiAgICBteSBARmlsZXNJbkRpcmVjdG9yeSA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkUGF0aCwKICAgICAgICBGaWx0ZXIgICAgPT4gJyonLAogICAgKTsKCnJlYWQgYWxsIGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzIGFzIHdlbGwgKHJlY3Vyc2l2ZSk6CgogICAgbXkgQEZpbGVzSW5EaXJlY3RvcnkgPSAkTWFpbk9iamVjdC0+RGlyZWN0b3J5UmVhZCgKICAgICAgICBEaXJlY3RvcnkgPT4gJFBhdGgsCiAgICAgICAgRmlsdGVyICAgID0+ICcqJywKICAgICAgICBSZWN1cnNpdmUgPT4gMSwKICAgICk7CgpZb3UgY2FuIHBhc3Mgc2V2ZXJhbCBhZGRpdGlvbmFsIGZpbHRlcnMgYXQgb25jZToKCiAgICBteSBARmlsZXNJbkRpcmVjdG9yeSA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAnL3RtcCcsCiAgICAgICAgRmlsdGVyICAgID0+IFxATXlGaWx0ZXJzLAogICAgKTsKClRoZSByZXN1bHQgc3RyaW5ncyBhcmUgYWJzb2x1dGUgcGF0aHMsIGFuZCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gdXRmOC4KClVzZSB0aGUgJ1NpbGVudCcgcGFyYW1ldGVyIHRvIHN1cHByZXNzIGxvZyBtZXNzYWdlcyB3aGVuIGEgZGlyZWN0b3J5CmRvZXMgbm90IGhhdmUgdG8gZXhpc3Q6CgogICAgbXkgQEZpbGVzSW5EaXJlY3RvcnkgPSAkTWFpbk9iamVjdC0+RGlyZWN0b3J5UmVhZCgKICAgICAgICBEaXJlY3RvcnkgPT4gJy9zcGVjaWFsL29wdGlvbmFsL2RpcmVjdG9yeS8nLAogICAgICAgIEZpbHRlciAgICA9PiAnKicsCiAgICAgICAgU2lsZW50ICAgID0+IDEsICAgICAjIHdpbGwgbm90IGxvZyBlcnJvcnMgaWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdAogICAgKTsKClBsYXRmb3JtIG5vdGU6IE1hY09TIChIRlMrKSBzdG9yZXMgZmlsZW5hbWVzIGFzIFVuaWNvZGUgQzxORkQ+IGludGVybmFsbHksCmFuZCBEaXJlY3RvcnlSZWFkKCkgd2lsbCBhbHNvIHJlcG9ydCB0aGVtIGFzIEM8TkZEPi4KCj1jdXQKCnN1YiBEaXJlY3RvcnlSZWFkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgcGFyYW1zCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGlyZWN0b3J5IEZpbHRlcikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWRlZCAkTmVlZGVkOiAkISIsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3RzIHN0b3AKICAgIGlmICggIS1kICRQYXJhbXtEaXJlY3Rvcnl9ICYmICEkUGFyYW17U2lsZW50fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0OiAkUGFyYW17RGlyZWN0b3J5fTogJCEiLAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgRmlsdGVyIHBhcmFtCiAgICBpZiAoIHJlZiAkUGFyYW17RmlsdGVyfSBuZSAnJyAmJiByZWYgJFBhcmFte0ZpbHRlcn0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0ZpbHRlciBwYXJhbSBuZWVkIHRvIGJlIHNjYWxhciBvciBhcnJheSByZWYhJywKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHByZXBhcmUgbm9uIGFycmF5IGZpbHRlcgogICAgaWYgKCByZWYgJFBhcmFte0ZpbHRlcn0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkUGFyYW17RmlsdGVyfSA9IFsgJFBhcmFte0ZpbHRlcn0gXTsKICAgIH0KCiAgICAjIGV4ZWN1dGVzIGdsb2IgZm9yIGV2ZXJ5IGZpbHRlcgogICAgbXkgQEdsb2JSZXN1bHRzOwogICAgbXkgJVNlZW47CgogICAgZm9yIG15ICRGaWx0ZXIgKCBAeyAkUGFyYW17RmlsdGVyfSB9ICkgewogICAgICAgIG15IEBHbG9iID0gZ2xvYiAiJFBhcmFte0RpcmVjdG9yeX0vJEZpbHRlciI7CgogICAgICAgICMgbG9vayBmb3IgcmVwZWF0ZWQgdmFsdWVzCiAgICAgICAgTkFNRToKICAgICAgICBmb3IgbXkgJEdsb2JOYW1lIChAR2xvYikgewoKICAgICAgICAgICAgbmV4dCBOQU1FIGlmICEtZSAkR2xvYk5hbWU7CiAgICAgICAgICAgIGlmICggISRTZWVueyRHbG9iTmFtZX0gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBHbG9iUmVzdWx0cywgJEdsb2JOYW1lOwogICAgICAgICAgICAgICAgJFNlZW57JEdsb2JOYW1lfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkUGFyYW17UmVjdXJzaXZlfSApIHsKCiAgICAgICAgIyBsb29wIHByb3RlY3Rpb24gdG8gcHJldmVudCBzeW1saW5rcyBjYXVzaW5nIGxvY2t1cHMKICAgICAgICAkUGFyYW17TG9vcFByb3RlY3Rpb259Kys7CiAgICAgICAgcmV0dXJuIGlmICRQYXJhbXtMb29wUHJvdGVjdGlvbn0gPiAxMDA7CgogICAgICAgICMgY2hlY2sgYWxsIGZpbGVzIGluIGN1cnJlbnQgZGlyZWN0b3J5CiAgICAgICAgbXkgQERpcmVjdG9yaWVzID0gZ2xvYiAiJFBhcmFte0RpcmVjdG9yeX0vKiI7CgogICAgICAgIERJUkVDVE9SWToKICAgICAgICBmb3IgbXkgJERpcmVjdG9yeSAoQERpcmVjdG9yaWVzKSB7CgogICAgICAgICAgICAjIHJldHVybiBpZiBmaWxlIGlzIG5vdCBhIGRpcmVjdG9yeQogICAgICAgICAgICBuZXh0IERJUkVDVE9SWSBpZiAhLWQgJERpcmVjdG9yeTsKCiAgICAgICAgICAgICMgcmVwZWF0IHNhbWUgZ2xvYiBmb3IgZGlyZWN0b3J5CiAgICAgICAgICAgIG15IEBTdWJSZXN1bHQgPSAkU2VsZi0+RGlyZWN0b3J5UmVhZCgKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIERpcmVjdG9yeSA9PiAkRGlyZWN0b3J5LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgcmVzdWx0IHRvIGhhc2gKICAgICAgICAgICAgZm9yIG15ICRSZXN1bHQgKEBTdWJSZXN1bHQpIHsKICAgICAgICAgICAgICAgIGlmICggISRTZWVueyRSZXN1bHR9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQEdsb2JSZXN1bHRzLCAkUmVzdWx0OwogICAgICAgICAgICAgICAgICAgICRTZWVueyRSZXN1bHR9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGlmIG5vIHJlc3VsdHMKICAgIHJldHVybiBpZiAhQEdsb2JSZXN1bHRzOwoKICAgICMgZ2V0IGVuY29kZSBvYmplY3QKICAgIG15ICRFbmNvZGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RW5jb2RlJyk7CgogICAgIyBjb21wb3NlIG5vcm1hbGl6ZSBldmVyeSBuYW1lIGluIHRoZSBmaWxlIGxpc3QKICAgIG15IEBSZXN1bHRzOwogICAgZm9yIG15ICRGaWxlbmFtZSAoQEdsb2JSZXN1bHRzKSB7CgogICAgICAgICMgRmlyc3QgY29udmVydCBmaWxlbmFtZSB0byB1dGYtOCwgd2l0aCBhZGRpdGlvbmFsIENoZWNrIHBhcmFtZXRlcgogICAgICAgICMgdG8gcmVwbGFjZSBwb3NzaWJsZSBtYWxmb3JtZWQgY2hhcmFjdGVycyBhbmQgcHJldmVudCBmdXJ0aGVyIGVycm9ycy4KICAgICAgICAkRmlsZW5hbWUgPSAkRW5jb2RlT2JqZWN0LT5Db252ZXJ0MkNoYXJzZXRJbnRlcm5hbCgKICAgICAgICAgICAgVGV4dCAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICBGcm9tICA9PiAndXRmLTgnLAogICAgICAgICAgICBDaGVjayA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFJlc3VsdHMsICRGaWxlbmFtZTsKICAgIH0KCiAgICAjIGFsd2F5cyBzb3J0IHRoZSByZXN1bHQKICAgIEBSZXN1bHRzID0gc29ydCBAUmVzdWx0czsKCiAgICByZXR1cm4gQFJlc3VsdHM7Cn0KCj1oZWFkMiBHZW5lcmF0ZVJhbmRvbVN0cmluZygpCgpnZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgb2YgZGVmaW5lZCBsZW5ndGgsIGFuZCBvZiBhIGRlZmluZWQgYWxwaGFiZXQuCmRlZmF1bHRzIHRvIGEgbGVuZ3RoIG9mIDE2IGFuZCBhbHBoYW51bWVyaWNzICggMC4uOSwgQS1aIGFuZCBhLXopLgoKICAgIG15ICRTdHJpbmcgPSAkTWFpbk9iamVjdC0+R2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKCnJldHVybnMKCiAgICAkU3RyaW5nID0gJ21ITE94N3BzV2pNZTVQajcnOwoKd2l0aCBzcGVjaWZpYyBsZW5ndGg6CgogICAgbXkgJFN0cmluZyA9ICRNYWluT2JqZWN0LT5HZW5lcmF0ZVJhbmRvbVN0cmluZygKICAgICAgICBMZW5ndGggPT4gMzIsCiAgICApOwoKcmV0dXJucwoKICAgICRTdHJpbmcgPSAnYXp6SGFiNzJ3SWxBWERyeEhleHNJNWFFTnNFU3hBTzcnOwoKd2l0aCBzcGVjaWZpYyBsZW5ndGggYW5kIGFscGhhYmV0OgoKICAgIG15ICRTdHJpbmcgPSAkTWFpbk9iamVjdC0+R2VuZXJhdGVSYW5kb21TdHJpbmcoCiAgICAgICAgTGVuZ3RoICAgICA9PiAzMiwKICAgICAgICBEaWN0aW9uYXJ5ID0+IFsgMC4uOSwgJ2EnLi4nZicgXSwgIyBoZXhhZGVjaW1hbAogICAgICAgICk7CgpyZXR1cm5zCgogICAgJFN0cmluZyA9ICc5ZmVjNjNkMzcwNzhmZTcyZjU3OThkMjA4NGZlYThhZCc7CgoKPWN1dAoKc3ViIEdlbmVyYXRlUmFuZG9tU3RyaW5nIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExlbmd0aCA9ICRQYXJhbXtMZW5ndGh9IHx8IDE2OwoKICAgICMgVGhlIHN0YW5kYXJkIGxpc3Qgb2YgY2hhcmFjdGVycyBpbiB0aGUgZGljdGlvbmFyeS4gRG9uJ3QgdXNlIHNwZWNpYWwgY2hhcnMgaGVyZS4KICAgIG15IEBEaWN0aW9uYXJ5Q2hhcnMgPSAoIDAgLi4gOSwgJ0EnIC4uICdaJywgJ2EnIC4uICd6JyApOwoKICAgICMgb3ZlcnJpZGUgZGljdGlvbmFyeSB3aXRoIGN1c3RvbSBsaXN0IGlmIGdpdmVuCiAgICBpZiAoICRQYXJhbXtEaWN0aW9uYXJ5fSAmJiByZWYgJFBhcmFte0RpY3Rpb25hcnl9IGVxICdBUlJBWScgKSB7CiAgICAgICAgQERpY3Rpb25hcnlDaGFycyA9IEB7ICRQYXJhbXtEaWN0aW9uYXJ5fSB9OwogICAgfQoKICAgIG15ICREaWN0aW9uYXJ5TGVuZ3RoID0gc2NhbGFyIEBEaWN0aW9uYXJ5Q2hhcnM7CgogICAgIyBnZW5lcmF0ZSB0aGUgc3RyaW5nCiAgICBteSAkU3RyaW5nOwoKICAgIGZvciBteSAkSW5kZXggKCAxIC4uICRMZW5ndGggKSB7CgogICAgICAgIG15ICRLZXkgPSBpbnQgTWF0aDo6UmFuZG9tOjpTZWN1cmU6OnJhbmQgJERpY3Rpb25hcnlMZW5ndGg7CgogICAgICAgICRTdHJpbmcgLj0gJERpY3Rpb25hcnlDaGFyc1skS2V5XTsKICAgIH0KCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWJlZ2luIEludGVybmFsOgoKPWN1dAoKc3ViIF9EdW1wIHsKICAgIG15ICggJFNlbGYsICREYXRhICkgPSBAXzsKCiAgICAjIGRhdGEgaXMgbm90IGEgcmVmZXJlbmNlCiAgICBpZiAoICFyZWYgJHskRGF0YX0gKSB7CiAgICAgICAgRW5jb2RlOjpfdXRmOF9vZmYoICR7JERhdGF9ICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRhdGEgaXMgYSBzY2FsYXIgcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkeyREYXRhfSBlcSAnU0NBTEFSJyApIHsKCiAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAkU2VsZi0+X0R1bXAoICR7JERhdGF9ICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRhdGEgaXMgYSBoYXNoIHJlZmVyZW5jZQogICAgaWYgKCByZWYgJHskRGF0YX0gZXEgJ0hBU0gnICkgewogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkeyREYXRhfSB9ICkgewogICAgICAgICAgICBuZXh0IEtFWSBpZiAhZGVmaW5lZCAkeyREYXRhfS0+eyRLZXl9OwoKICAgICAgICAgICAgIyBzdGFydCByZWN1cnNpb24KICAgICAgICAgICAgJFNlbGYtPl9EdW1wKCBcJHskRGF0YX0tPnskS2V5fSApOwoKICAgICAgICAgICAgbXkgJEtleU5ldyA9ICRLZXk7CgogICAgICAgICAgICAkU2VsZi0+X0R1bXAoIFwkS2V5TmV3ICk7CgogICAgICAgICAgICBpZiAoICRLZXkgbmUgJEtleU5ldyApIHsKCiAgICAgICAgICAgICAgICAkeyREYXRhfS0+eyRLZXlOZXd9ID0gJHskRGF0YX0tPnskS2V5fTsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkeyREYXRhfS0+eyRLZXl9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkYXRhIGlzIGEgYXJyYXkgcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkeyREYXRhfSBlcSAnQVJSQVknICkgewogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIDAgLi4gJCN7ICR7JERhdGF9IH0gKSB7CiAgICAgICAgICAgIG5leHQgS0VZIGlmICFkZWZpbmVkICR7JERhdGF9LT5bJEtleV07CgogICAgICAgICAgICAjIHN0YXJ0IHJlY3Vyc2lvbgogICAgICAgICAgICAkU2VsZi0+X0R1bXAoIFwkeyREYXRhfS0+WyRLZXldICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkYXRhIGlzIGEgcmVmIHJlZmVyZW5jZQogICAgaWYgKCByZWYgJHskRGF0YX0gZXEgJ1JFRicgKSB7CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uCiAgICAgICAgJFNlbGYtPl9EdW1wKCAkeyREYXRhfSApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkYXRhIGlzIGEgSlNPTjo6UFA6OkJvb2xlYW4KICAgIGlmICggcmVmICR7JERhdGF9IGVxICdKU09OOjpQUDo6Qm9vbGVhbicgKSB7CgogICAgICAgICMgc3RhcnQgcmVjdXJzaW9uCiAgICAgICAgJFNlbGYtPl9EdW1wKCAkeyREYXRhfSApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICBNZXNzYWdlICA9PiAiVW5rbm93biByZWYgJyIgLiByZWYoICR7JERhdGF9ICkgLiAiJyEiLAogICAgKTsKCiAgICByZXR1cm47Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAoAAAAAAAAAAF12AAAAAAAAAAAAAAAAAAAAAAAAXXYAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
-				]
-			]
-		},
-		{
-			"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/CheckItem.pm",
-			"settings":
-			{
-				"buffer_size": 10580,
-				"line_ending": "Unix"
-			},
-			"undo_stack":
-			[
-				[
-					10,
-					1,
-					"revert",
-					null,
-					"AgAAAAAAAAAAAAAAAAAAAAAAAABUKQAAIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEVtYWlsOjpWYWxpZDsKdXNlIE1haWw6OkFkZHJlc3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbSAtIGNoZWNrIGl0ZW1zCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBpdGVtIGNoZWNrIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCkRvbid0IHVzZSB0aGUgY29uc3RydWN0b3IgZGlyZWN0bHksIHVzZSB0aGUgT2JqZWN0TWFuYWdlciBpbnN0ZWFkOgoKICAgIG15ICRDaGVja0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIENoZWNrRXJyb3IoKQoKZ2V0IHRoZSBlcnJvciBvZiBjaGVjayBpdGVtIGJhY2sKCiAgICBteSAkRXJyb3IgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0Vycm9yKCk7Cgo9Y3V0CgpzdWIgQ2hlY2tFcnJvciB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybiAkU2VsZi0+e0Vycm9yfTsKfQoKPWhlYWQyIENoZWNrRXJyb3JUeXBlKCkKCmdldCB0aGUgZXJyb3IncyB0eXBlIG9mIGNoZWNrIGl0ZW0gYmFjawoKICAgIG15ICRFcnJvclR5cGUgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0Vycm9yVHlwZSgpOwoKPWN1dAoKc3ViIENoZWNrRXJyb3JUeXBlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRTZWxmLT57RXJyb3JUeXBlfTsKfQoKPWhlYWQyIENoZWNrRW1haWwoKQoKcmV0dXJucyB0cnVlIGlmIGNoZWNrIHdhcyBzdWNjZXNzZnVsLCBpZiBpdCdzIGZhbHNlLCBnZXQgdGhlIGVycm9yIG1lc3NhZ2UKZnJvbSBDaGVja0Vycm9yKCkKCiAgICBteSAkVmFsaWQgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKAogICAgICAgIEFkZHJlc3MgPT4gJ2luZm9AZXhhbXBsZS5jb20nLAogICAgKTsKCj1jdXQKCnN1YiBDaGVja0VtYWlsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtBZGRyZXNzfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQWRkcmVzcyEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBjaGVjayBpZiBpdCdzIHRvIGRvCiAgICByZXR1cm4gMSBpZiAhJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJyk7CgogICAgIyBjaGVjayB2YWxpZCBlbWFpbCBhZGRyZXNzZXMKICAgIG15ICRSZWdFeHAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxWYWxpZEFkZHJlc3MnKTsKICAgIGlmICggJFJlZ0V4cCAmJiAkUGFyYW17QWRkcmVzc30gPX4gLyRSZWdFeHAvaSApIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIG15ICRFcnJvciA9ICcnOwoKICAgICMgV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL1BlcmwtRW1haWwtUHJvamVjdC9FbWFpbC1WYWxpZC9pc3N1ZXMvMzY6CiAgICAjIHJlbW92ZSBjb21tZW50IGZyb20gYWRkcmVzcyB3aGVuIGNoZWNraW5nLgogICAgJFBhcmFte0FkZHJlc3N9ID1+IHN7IFxzKiBcKCBbXigpXSogXCkgXHMqICQgfXt9c214ZzsKCiAgICAjIGVtYWlsIGFkZHJlc3Mgc3ludGF4IGNoZWNrCiAgICBpZiAoICFFbWFpbDo6VmFsaWQtPmFkZHJlc3MoICRQYXJhbXtBZGRyZXNzfSApICkgewogICAgICAgICRFcnJvciA9ICJJbnZhbGlkIHN5bnRheCI7CiAgICAgICAgJFNlbGYtPntFcnJvclR5cGV9ID0gJ0ludmFsaWRTeW50YXgnOwogICAgfQoKICAgICMgcGVyaW9kICgiLiIpIG1heSBub3QgYmUgdXNlZCB0byBlbmQgdGhlIGxvY2FsIHBhcnQsCiAgICAjIG5vciBtYXkgdHdvIG9yIG1vcmUgY29uc2VjdXRpdmUgcGVyaW9kcyBhcHBlYXIKICAgIGVsc2lmICggJFBhcmFte0FkZHJlc3N9ID1+IC8oXC5cLil8KFwuQCkvICkgewogICAgICAgICRFcnJvciA9ICJJbnZhbGlkIHN5bnRheCI7CiAgICAgICAgJFNlbGYtPntFcnJvclR5cGV9ID0gJ0ludmFsaWRTeW50YXgnOwogICAgfQoKICAgICMgbXggY2hlY2sKICAgIGVsc2lmICgKICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrTVhSZWNvcmQnKQogICAgICAgICYmIGV2YWwgeyByZXF1aXJlIE5ldDo6RE5TIH0gICAgIyMgbm8gY3JpdGljCiAgICAgICAgKQogICAgewoKICAgICAgICAjIGdldCBob3N0CiAgICAgICAgbXkgJEhvc3QgPSAkUGFyYW17QWRkcmVzc307CiAgICAgICAgJEhvc3QgPX4gcy9eLipAKC4qKSQvJDEvOwogICAgICAgICRIb3N0ID1+IHMvXHMrLy9nOwogICAgICAgICRIb3N0ID1+IHMvKF5cWyl8KFxdJCkvL2c7CgogICAgICAgICMgZG8gZG5zIHF1ZXJ5CiAgICAgICAgbXkgJFJlc29sdmVyID0gTmV0OjpETlM6OlJlc29sdmVyLT5uZXcoKTsKICAgICAgICBpZiAoJFJlc29sdmVyKSB7CgogICAgICAgICAgICAjIGl0J3Mgbm8gZnVuIHRvIGhhdmUgdGhpcyBoYW5naW5nIGluIHRoZSB3ZWIgaW50ZXJmYWNlCiAgICAgICAgICAgICRSZXNvbHZlci0+dGNwX3RpbWVvdXQoMyk7CiAgICAgICAgICAgICRSZXNvbHZlci0+dWRwX3RpbWVvdXQoMyk7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHdlIG5lZWQgdG8gdXNlIGEgc3BlY2lmaWMgbmFtZSBzZXJ2ZXIKICAgICAgICAgICAgbXkgJE5hbWVzZXJ2ZXIgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrTVhSZWNvcmQ6Ok5hbWVzZXJ2ZXInKTsKICAgICAgICAgICAgaWYgKCROYW1lc2VydmVyKSB7CiAgICAgICAgICAgICAgICAkUmVzb2x2ZXItPm5hbWVzZXJ2ZXJzKCROYW1lc2VydmVyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBBLXJlY29yZCBsb29rdXAgdG8gdmVyaWZ5IHByb3BlciBETlMgc2V0dXAKICAgICAgICAgICAgbXkgJFBhY2tldCA9ICRSZXNvbHZlci0+c2VuZCggJEhvc3QsICdBJyApOwogICAgICAgICAgICBpZiAoICEkUGFja2V0ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntFcnJvclR5cGV9ID0gJ0ludmFsaWRETlMnOwogICAgICAgICAgICAgICAgJEVycm9yID0gIkROUyBwcm9ibGVtOiAiIC4gJFJlc29sdmVyLT5lcnJvcnN0cmluZygpOwogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkRXJyb3IsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgUkZDIDUzMjE6IGZpcnN0IGNoZWNrIE1YIHJlY29yZCBhbmQgZmFsbGJhY2sgdG8gQSByZWNvcmQgaWYgcHJlc2VudC4KICAgICAgICAgICAgICAgICMgbXggcmVjb3JkIGxvb2t1cAogICAgICAgICAgICAgICAgbXkgQE1YUmVjb3JkcyA9IE5ldDo6RE5TOjpteCggJFJlc29sdmVyLCAkSG9zdCApOwoKICAgICAgICAgICAgICAgIGlmICggIUBNWFJlY29yZHMgKSB7CgogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJEhvc3QgaGFzIG5vIG1haWwgZXhjaGFuZ2VyIChNWCkgZGVmaW5lZCwgdHJ5aW5nIEEgcmVzb3VyY2UgcmVjb3JkIGluc3RlYWQuIiwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHNlZSBpZiBvdXIgcHJldmlvdXMgQS1yZWNvcmQgbG9va3VwIHJldHVybmVkIGEgUlIKICAgICAgICAgICAgICAgICAgICBpZiAoIHNjYWxhciAkUGFja2V0LT5hbnN3ZXIoKSBlcSAwICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntFcnJvclR5cGV9ID0gJ0ludmFsaWRNWCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvciA9ICIkSG9zdCBoYXMgbm8gbWFpbCBleGNoYW5nZXIgKE1YKSBvciBBIHJlc291cmNlIHJlY29yZCBkZWZpbmVkLiI7CgogICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrTVhSZWNvcmQnKSApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBsb2FkIE5ldDo6RE5TLCBubyBteCBsb29rdXBzIHBvc3NpYmxlIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgYWRkcmVzcwogICAgaWYgKCAhJEVycm9yICkgewoKICAgICAgICAjIGNoZWNrIHNwZWNpYWwgc3R1ZmYKICAgICAgICBteSAkUmVnRXhwID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsSW52YWxpZEFkZHJlc3MnKTsKICAgICAgICBpZiAoICRSZWdFeHAgJiYgJFBhcmFte0FkZHJlc3N9ID1+IC8kUmVnRXhwL2kgKSB7CiAgICAgICAgICAgICRTZWxmLT57RXJyb3J9ICAgICA9ICJpbnZhbGlkICRQYXJhbXtBZGRyZXNzfSAoY29uZmlnKSEiOwogICAgICAgICAgICAkU2VsZi0+e0Vycm9yVHlwZX0gPSAnSW52YWxpZENvbmZpZyc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyByZW1lbWJlciBlcnJvcgogICAgICAgICRTZWxmLT57RXJyb3J9ID0gImludmFsaWQgJFBhcmFte0FkZHJlc3N9ICgkRXJyb3IpISAiOwogICAgICAgIHJldHVybjsKICAgIH0KfQoKPWhlYWQyIEFyZUVtYWlsQWRkcmVzc2VzVmFsaWQoKQoKICAgIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGNvbnRhaW5zIG9ubHkgdmFsaWQgZW1haWwgYWRkcmVzcyhlcykuCgogICAgbXkgJEVtYWlsQWRkcmVzc2VzQXJlVmFsaWQgPSAkVXRpbE9iamVjdC0+QXJlRW1haWxBZGRyZXNzZXNWYWxpZCgKICAgICAgICBFbWFpbEFkZHJlc3NlcyA9PiAndGVzdEBleGFtcGxlLm9yZywgdGVzdDJAZXhhbXBsZS5vcmcnLAoKICAgICAgICAjIG9yIGFzIGFycmF5IHJlZgogICAgICAgIEVtYWlsQWRkcmVzc2VzID0+IFsKICAgICAgICAgICAgJ3Rlc3RAZXhhbXBsZS5vcmcnLAogICAgICAgICAgICAndGVzdDJAZXhhbXBsZS5vcmcnLAogICAgICAgIF0sCgogICAgICAgICMgYWxzbyB3b3JrcyB3aXRoIGp1c3Qgb25lIGFkZHJlc3MKICAgICAgICBFbWFpbEFkZHJlc3NlcyA9PiAndGVzdEBleGFtcGxlLm9yZycsCgogICAgICAgICMgb3IgYXMgYXJyYXkgcmVmCiAgICAgICAgRW1haWxBZGRyZXNzZXMgPT4gWyd0ZXN0QGV4YW1wbGUub3JnJ10sCiAgICApOwoKICAgIFJldHVybnMgdHJ1ZSB2YWx1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG9ubHkgY29udGFpbnMgdmFsaWQgZW1haWwgYWRkcmVzc2VzLgoKPWN1dAoKc3ViIEFyZUVtYWlsQWRkcmVzc2VzVmFsaWQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte0VtYWlsQWRkcmVzc2VzfTsKCiAgICBpZiAoIHJlZiAkUGFyYW17RW1haWxBZGRyZXNzZXN9IGVxICdBUlJBWScgKSB7CiAgICAgICAgJFBhcmFte0VtYWlsQWRkcmVzc2VzfSA9IGpvaW4gJywgJywgQHsgJFBhcmFte0VtYWlsQWRkcmVzc2VzfSB9OwogICAgfQoKICAgIG15IEBFbWFpbEFkZHJlc3NlcyA9IE1haWw6OkFkZHJlc3MtPnBhcnNlKCAkUGFyYW17RW1haWxBZGRyZXNzZXN9ICk7CiAgICByZXR1cm4gaWYgIUBFbWFpbEFkZHJlc3NlczsKCiAgICBFTUFJTEFERFJFU1M6CiAgICBmb3IgbXkgJEVtYWlsQWRkcmVzcyAoQEVtYWlsQWRkcmVzc2VzKSB7CiAgICAgICAgbXkgJEVtYWlsQWRkcmVzc0lzVmFsaWQgPSAkU2VsZi0+Q2hlY2tFbWFpbCgKICAgICAgICAgICAgQWRkcmVzcyA9PiAkRW1haWxBZGRyZXNzLT5hZGRyZXNzKCkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gaWYgISRFbWFpbEFkZHJlc3NJc1ZhbGlkOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgU3RyaW5nQ2xlYW4oKQoKY2xlYW4gYSBnaXZlbiBzdHJpbmcuCgogICAgbXkgJFN0cmluZ1JlZiA9ICRDaGVja0l0ZW1PYmplY3QtPlN0cmluZ0NsZWFuKAogICAgICAgIFN0cmluZ1JlZiAgICAgICAgICAgICA9PiBcJ1N0cmluZycsCiAgICAgICAgVHJpbUxlZnQgICAgICAgICAgICAgID0+IDAsICAjIChvcHRpb25hbCkgZGVmYXVsdCAxCiAgICAgICAgVHJpbVJpZ2h0ICAgICAgICAgICAgID0+IDAsICAjIChvcHRpb25hbCkgZGVmYXVsdCAxCiAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgICAgID0+IDEsICAjIChvcHRpb25hbCkgZGVmYXVsdCAwCiAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgICAgID0+IDEsICAjIChvcHRpb25hbCkgZGVmYXVsdCAwCiAgICAgICAgUmVtb3ZlQWxsU3BhY2VzICAgICAgID0+IDEsICAjIChvcHRpb25hbCkgZGVmYXVsdCAwCiAgICAgICAgUmVwbGFjZVdpdGhXaGl0ZVNwYWNlID0+IDEsICAjIChvcHRpb25hbCkgZGVmYXVsdCAwCiAgICApOwoKPWN1dAoKc3ViIFN0cmluZ0NsZWFuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhJFBhcmFte1N0cmluZ1JlZn0gfHwgcmVmICRQYXJhbXtTdHJpbmdSZWZ9IG5lICdTQ0FMQVInICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBhIHNjYWxhciByZWZlcmVuY2UhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17U3RyaW5nUmVmfSBpZiAhZGVmaW5lZCAkeyAkUGFyYW17U3RyaW5nUmVmfSB9OwogICAgcmV0dXJuICRQYXJhbXtTdHJpbmdSZWZ9IGlmICR7ICRQYXJhbXtTdHJpbmdSZWZ9IH0gZXEgJyc7CgogICAgIyBjaGVjayBmb3IgaW52YWxpZCB1dGY4IGNoYXJhY3RlcnMgYW5kIHJlbW92ZSBpbnZhbGlkIHN0cmluZ3MKICAgIGlmICggIXV0Zjg6OnZhbGlkKCAkeyAkUGFyYW17U3RyaW5nUmVmfSB9ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJSZW1vdmVkIHN0cmluZyBjb250YWluaW5nIGludmFsaWQgdXRmODogJyR7ICRQYXJhbXtTdHJpbmdSZWZ9IH0nISIsCiAgICAgICAgKTsKICAgICAgICAkeyAkUGFyYW17U3RyaW5nUmVmfSB9ID0gJyc7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWVzCiAgICAkUGFyYW17VHJpbUxlZnR9ICA9IGRlZmluZWQgJFBhcmFte1RyaW1MZWZ0fSAgPyAkUGFyYW17VHJpbUxlZnR9ICA6IDE7CiAgICAkUGFyYW17VHJpbVJpZ2h0fSA9IGRlZmluZWQgJFBhcmFte1RyaW1SaWdodH0gPyAkUGFyYW17VHJpbVJpZ2h0fSA6IDE7CgogICAgbXkgJVRyaW1BY3Rpb24gPSAoCiAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gcXJ7IChcblxyfFxufFxyfFxmKSsgfXhtcywKICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiBxcnsgXHQgICAgICAgfXhtcywKICAgICAgICBSZW1vdmVBbGxTcGFjZXMgICA9PiBxcnsgWyBdICAgICAgfXhtcywKICAgICAgICBUcmltTGVmdCAgICAgICAgICA9PiBxcnsgXEEgXHMrICAgfXhtcywKICAgICAgICBUcmltUmlnaHQgICAgICAgICA9PiBxcnsgXHMrIFx6ICAgfXhtcywKICAgICk7CgogICAgQUNUSU9OOgogICAgZm9yIG15ICRBY3Rpb24gKCBzb3J0IGtleXMgJVRyaW1BY3Rpb24gKSB7CiAgICAgICAgbmV4dCBBQ1RJT04gaWYgISRQYXJhbXskQWN0aW9ufTsKICAgICAgICBteSAkUmVwbGFjZVdpdGggPSAnJzsKCiAgICAgICAgIyBDaGVjayBpZiBOZXdsaW5lIG9yIFRhYnMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSB3aGl0ZXNwYWNlCiAgICAgICAgaWYgKAogICAgICAgICAgICAkUGFyYW17UmVwbGFjZVdpdGhXaGl0ZVNwYWNlfQogICAgICAgICAgICAmJiAoICRBY3Rpb24gZXEgJ1JlbW92ZUFsbE5ld2xpbmVzJyB8fCAkQWN0aW9uIGVxICdSZW1vdmVBbGxUYWJzJyApCiAgICAgICAgICAgICYmICEkUGFyYW17UmVtb3ZlQWxsU3BhY2VzfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkUmVwbGFjZVdpdGggPSAnICc7CiAgICAgICAgfQogICAgICAgICR7ICRQYXJhbXtTdHJpbmdSZWZ9IH0gPX4gc3sgJFRyaW1BY3Rpb257JEFjdGlvbn0gfXskUmVwbGFjZVdpdGh9eG1zZzsKICAgIH0KCiAgICByZXR1cm4gJFBhcmFte1N0cmluZ1JlZn07Cn0KCj1oZWFkMiBDcmVkaXRDYXJkQ2xlYW4oKQoKY2xlYW4gYSBnaXZlbiBzdHJpbmcgYW5kIHJlbW92ZSBjcmVkaXQgY2FyZAoKICAgIG15ICgkU3RyaW5nUmVmLCAkRm91bmQpID0gJENoZWNrSXRlbU9iamVjdC0+Q3JlZGl0Q2FyZENsZWFuKAogICAgICAgIFN0cmluZ1JlZiA9PiBcJ1N0cmluZycsCiAgICApOwoKPWN1dAoKc3ViIENyZWRpdENhcmRDbGVhbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggISRQYXJhbXtTdHJpbmdSZWZ9IHx8IHJlZiAkUGFyYW17U3RyaW5nUmVmfSBuZSAnU0NBTEFSJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgYSBzY2FsYXIgcmVmZXJlbmNlIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gKCAkUGFyYW17U3RyaW5nUmVmfSwgMCApIGlmICR7ICRQYXJhbXtTdHJpbmdSZWZ9IH0gZXEgJyc7CiAgICByZXR1cm4gKCAkUGFyYW17U3RyaW5nUmVmfSwgMCApIGlmICFkZWZpbmVkICR7ICRQYXJhbXtTdHJpbmdSZWZ9IH07CgogICAgIyBzdHJpcCBjcmVkaXQgY2FyZCBudW1iZXJzCiAgICBteSAkQ291bnQgPSAwOwogICAgJHsgJFBhcmFte1N0cmluZ1JlZn0gfSA9fiBzewogICAgICAgIFxiKFxkezR9KShcc3xcLnxcK3xffC18XFx8LykoXGR7NH0pKFxzfFwufFwrfF98LXxcXHwvfCkoXGR7NH0pKFxzfFwufFwrfF98LXxcXHwvKShcZHszLDR9KVxiCiAgICB9CiAgICB7CiAgICAgICAgJENvdW50Kys7CiAgICAgICAgIiQxJDJYWFhYJDRYWFhYJDYkNyI7CiAgICB9ZWd4OwoKICAgIHJldHVybiAkUGFyYW17U3RyaW5nUmVmfSwgJENvdW50Owp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAoAAAAAAAAAAGIpAAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD+AQAAAAAAAP4BAAAAAAAAAAAAAAAA8L8"
-				],
-				[
-					11,
-					1,
-					"revert",
-					null,
-					"AwAAAAAAAAAAAAAAAAAAAAAAAABiKQAAIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEVtYWlsOjpWYWxpZDsKdXNlIE1haWw6OkFkZHJlc3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbSAtIGNoZWNrIGl0ZW1zCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBpdGVtIGNoZWNrIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCkRvbid0IHVzZSB0aGUgY29uc3RydWN0b3IgZGlyZWN0bHksIHVzZSB0aGUgT2JqZWN0TWFuYWdlciBpbnN0ZWFkOgoKICAgIG15ICRDaGVja0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIENoZWNrRXJyb3IoKQoKZ2V0IHRoZSBlcnJvciBvZiBjaGVjayBpdGVtIGJhY2sKCiAgICBteSAkRXJyb3IgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0Vycm9yKCk7Cgo9Y3V0CgpzdWIgQ2hlY2tFcnJvciB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybiAkU2VsZi0+e0Vycm9yfTsKfQoKPWhlYWQyIENoZWNrRXJyb3JUeXBlKCkKCmdldCB0aGUgZXJyb3IncyB0eXBlIG9mIGNoZWNrIGl0ZW0gYmFjawoKICAgIG15ICRFcnJvclR5cGUgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0Vycm9yVHlwZSgpOwoKPWN1dAoKc3ViIENoZWNrRXJyb3JUeXBlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRTZWxmLT57RXJyb3JUeXBlfTsKfQoKPWhlYWQyIENoZWNrRW1haWwoKQoKcmV0dXJucyB0cnVlIGlmIGNoZWNrIHdhcyBzdWNjZXNzZnVsLCBpZiBpdCdzIGZhbHNlLCBnZXQgdGhlIGVycm9yIG1lc3NhZ2UKZnJvbSBDaGVja0Vycm9yKCkKCiAgICBteSAkVmFsaWQgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKAogICAgICAgIEFkZHJlc3MgPT4gJ2luZm9AZXhhbXBsZS5jb20nLAogICAgKTsKCj1jdXQKCnN1YiBDaGVja0VtYWlsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtBZGRyZXNzfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQWRkcmVzcyEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBjaGVjayBpZiBpdCdzIHRvIGRvCiAgICByZXR1cm4gMSBpZiAhJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJyk7CgogICAgIyBjaGVjayB2YWxpZCBlbWFpbCBhZGRyZXNzZXMKICAgIG15ICRSZWdFeHAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxWYWxpZEFkZHJlc3MnKTsKICAgIGlmICggJFJlZ0V4cCAmJiAkUGFyYW17QWRkcmVzc30gPX4gLyRSZWdFeHAvaSApIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIG15ICRFcnJvciA9ICcnOwoKICAgICMgV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL1BlcmwtRW1haWwtUHJvamVjdC9FbWFpbC1WYWxpZC9pc3N1ZXMvMzY6CiAgICAjIHJlbW92ZSBjb21tZW50IGZyb20gYWRkcmVzcyB3aGVuIGNoZWNraW5nLgogICAgJFBhcmFte0FkZHJlc3N9ID1+IHN7IFxzKiBcKCBbXigpXSogXCkgXHMqICQgfXt9c214ZzsKCiAgICAjIGVtYWlsIGFkZHJlc3Mgc3ludGF4IGNoZWNrCiAgICBpZiAoICFFbWFpbDo6VmFsaWQtPmFkZHJlc3MoICRQYXJhbXtBZGRyZXNzfSApICkgewogICAgICAgICRFcnJvciA9ICJJbnZhbGlkIHN5bnRheCI7CiAgICAgICAgJFNlbGYtPntFcnJvclR5cGV9ID0gJ0ludmFsaWRTeW50YXgnOwogICAgfQoKICAgICMgcGVyaW9kICgiLiIpIG1heSBub3QgYmUgdXNlZCB0byBlbmQgdGhlIGxvY2FsIHBhcnQsCiAgICAjIG5vciBtYXkgdHdvIG9yIG1vcmUgY29uc2VjdXRpdmUgcGVyaW9kcyBhcHBlYXIKICAgIGVsc2lmICggJFBhcmFte0FkZHJlc3N9ID1+IC8oXC5cLil8KFwuQCkvICkgewogICAgICAgICRFcnJvciA9ICJJbnZhbGlkIHN5bnRheCI7CiAgICAgICAgJFNlbGYtPntFcnJvclR5cGV9ID0gJ0ludmFsaWRTeW50YXgnOwogICAgfQoKICAgICMgbXggY2hlY2sKICAgIGVsc2lmICgKICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrTVhSZWNvcmQnKQogICAgICAgICYmIGV2YWwgeyByZXF1aXJlIE5ldDo6RE5TIH0gICAgIyMgbm8gY3JpdGljCiAgICAgICAgKQogICAgewoKICAgICAgICAjIGdldCBob3N0CiAgICAgICAgbXkgJEhvc3QgPSAkUGFyYW17QWRkcmVzc307CiAgICAgICAgJEhvc3QgPX4gcy9eLipAKC4qKSQvJDEvOwogICAgICAgICRIb3N0ID1+IHMvXHMrLy9nOwogICAgICAgICRIb3N0ID1+IHMvKF5cWyl8KFxdJCkvL2c7CgogICAgICAgICMgZG8gZG5zIHF1ZXJ5CiAgICAgICAgbXkgJFJlc29sdmVyID0gTmV0OjpETlM6OlJlc29sdmVyLT5uZXcoKTsKICAgICAgICBpZiAoJFJlc29sdmVyKSB7CgogICAgICAgICAgICAjIGl0J3Mgbm8gZnVuIHRvIGhhdmUgdGhpcyBoYW5naW5nIGluIHRoZSB3ZWIgaW50ZXJmYWNlCiAgICAgICAgICAgICRSZXNvbHZlci0+dGNwX3RpbWVvdXQoMyk7CiAgICAgICAgICAgICRSZXNvbHZlci0+dWRwX3RpbWVvdXQoMyk7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHdlIG5lZWQgdG8gdXNlIGEgc3BlY2lmaWMgbmFtZSBzZXJ2ZXIKICAgICAgICAgICAgbXkgJE5hbWVzZXJ2ZXIgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrTVhSZWNvcmQ6Ok5hbWVzZXJ2ZXInKTsKICAgICAgICAgICAgaWYgKCROYW1lc2VydmVyKSB7CiAgICAgICAgICAgICAgICAkUmVzb2x2ZXItPm5hbWVzZXJ2ZXJzKCROYW1lc2VydmVyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBBLXJlY29yZCBsb29rdXAgdG8gdmVyaWZ5IHByb3BlciBETlMgc2V0dXAKICAgICAgICAgICAgbXkgJFBhY2tldCA9ICRSZXNvbHZlci0+c2VuZCggJEhvc3QsICdBJyApOwogICAgICAgICAgICBpZiAoICEkUGFja2V0ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntFcnJvclR5cGV9ID0gJ0ludmFsaWRETlMnOwogICAgICAgICAgICAgICAgJEVycm9yID0gIkROUyBwcm9ibGVtOiAiIC4gJFJlc29sdmVyLT5lcnJvcnN0cmluZygpOwogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkRXJyb3IsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgUkZDIDUzMjE6IGZpcnN0IGNoZWNrIE1YIHJlY29yZCBhbmQgZmFsbGJhY2sgdG8gQSByZWNvcmQgaWYgcHJlc2VudC4KICAgICAgICAgICAgICAgICMgbXggcmVjb3JkIGxvb2t1cAogICAgICAgICAgICAgICAgbXkgQE1YUmVjb3JkcyA9IE5ldDo6RE5TOjpteCggJFJlc29sdmVyLCAkSG9zdCApOwoKICAgICAgICAgICAgICAgIGlmICggIUBNWFJlY29yZHMgKSB7CgogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJEhvc3QgaGFzIG5vIG1haWwgZXhjaGFuZ2VyIChNWCkgZGVmaW5lZCwgdHJ5aW5nIEEgcmVzb3VyY2UgcmVjb3JkIGluc3RlYWQuIiwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHNlZSBpZiBvdXIgcHJldmlvdXMgQS1yZWNvcmQgbG9va3VwIHJldHVybmVkIGEgUlIKICAgICAgICAgICAgICAgICAgICBpZiAoIHNjYWxhciAkUGFja2V0LT5hbnN3ZXIoKSBlcSAwICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntFcnJvclR5cGV9ID0gJ0ludmFsaWRNWCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvciA9ICIkSG9zdCBoYXMgbm8gbWFpbCBleGNoYW5nZXIgKE1YKSBvciBBIHJlc291cmNlIHJlY29yZCBkZWZpbmVkLiI7CgogICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrTVhSZWNvcmQnKSApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBsb2FkIE5ldDo6RE5TLCBubyBteCBsb29rdXBzIHBvc3NpYmxlIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgYWRkcmVzcwogICAgaWYgKCAhJEVycm9yICkgewoKICAgICAgICAjIGNoZWNrIHNwZWNpYWwgc3R1ZmYKICAgICAgICBteSAkUmVnRXhwID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsSW52YWxpZEFkZHJlc3MnKTsKICAgICAgICBpZiAoICRSZWdFeHAgJiYgJFBhcmFte0FkZHJlc3N9ID1+IC8kUmVnRXhwL2kgKSB7CiAgICAgICAgICAgICRTZWxmLT57RXJyb3J9ICAgICA9ICJpbnZhbGlkICRQYXJhbXtBZGRyZXNzfSAoY29uZmlnKSEiOwogICAgICAgICAgICAkU2VsZi0+e0Vycm9yVHlwZX0gPSAnSW52YWxpZENvbmZpZyc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyByZW1lbWJlciBlcnJvcgogICAgICAgICRTZWxmLT57RXJyb3J9ID0gImludmFsaWQgJFBhcmFte0FkZHJlc3N9ICgkRXJyb3IpISAiOwogICAgICAgIHJldHVybjsKICAgIH0KfQoKPWhlYWQyIEFyZUVtYWlsQWRkcmVzc2VzVmFsaWQoKQoKICAgIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGNvbnRhaW5zIG9ubHkgdmFsaWQgZW1haWwgYWRkcmVzcyhlcykuCgogICAgbXkgJEVtYWlsQWRkcmVzc2VzQXJlVmFsaWQgPSAkVXRpbE9iamVjdC0+QXJlRW1haWxBZGRyZXNzZXNWYWxpZCgKICAgICAgICBFbWFpbEFkZHJlc3NlcyA9PiAndGVzdEBleGFtcGxlLm9yZywgdGVzdDJAZXhhbXBsZS5vcmcnLAoKICAgICAgICAjIG9yIGFzIGFycmF5IHJlZgogICAgICAgIEVtYWlsQWRkcmVzc2VzID0+IFsKICAgICAgICAgICAgJ3Rlc3RAZXhhbXBsZS5vcmcnLAogICAgICAgICAgICAndGVzdDJAZXhhbXBsZS5vcmcnLAogICAgICAgIF0sCgogICAgICAgICMgYWxzbyB3b3JrcyB3aXRoIGp1c3Qgb25lIGFkZHJlc3MKICAgICAgICBFbWFpbEFkZHJlc3NlcyA9PiAndGVzdEBleGFtcGxlLm9yZycsCgogICAgICAgICMgb3IgYXMgYXJyYXkgcmVmCiAgICAgICAgRW1haWxBZGRyZXNzZXMgPT4gWyd0ZXN0QGV4YW1wbGUub3JnJ10sCiAgICApOwoKICAgIFJldHVybnMgdHJ1ZSB2YWx1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG9ubHkgY29udGFpbnMgdmFsaWQgZW1haWwgYWRkcmVzc2VzLgoKPWN1dAoKc3ViIEFyZUVtYWlsQWRkcmVzc2VzVmFsaWQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgIWRlZmluZWQgJFBhcmFte0VtYWlsQWRkcmVzc2VzfTsKCiAgICBpZiAoIHJlZiAkUGFyYW17RW1haWxBZGRyZXNzZXN9IGVxICdBUlJBWScgKSB7CiAgICAgICAgJFBhcmFte0VtYWlsQWRkcmVzc2VzfSA9IGpvaW4gJywgJywgQHsgJFBhcmFte0VtYWlsQWRkcmVzc2VzfSB9OwogICAgfQoKICAgIG15IEBFbWFpbEFkZHJlc3NlcyA9IE1haWw6OkFkZHJlc3MtPnBhcnNlKCAkUGFyYW17RW1haWxBZGRyZXNzZXN9ICk7CiAgICByZXR1cm4gaWYgIUBFbWFpbEFkZHJlc3NlczsKCiAgICBFTUFJTEFERFJFU1M6CiAgICBmb3IgbXkgJEVtYWlsQWRkcmVzcyAoQEVtYWlsQWRkcmVzc2VzKSB7CiAgICAgICAgbXkgJEVtYWlsQWRkcmVzc0lzVmFsaWQgPSAkU2VsZi0+Q2hlY2tFbWFpbCgKICAgICAgICAgICAgQWRkcmVzcyA9PiAkRW1haWxBZGRyZXNzLT5hZGRyZXNzKCkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gaWYgISRFbWFpbEFkZHJlc3NJc1ZhbGlkOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgU3RyaW5nQ2xlYW4oKQoKY2xlYW4gYSBnaXZlbiBzdHJpbmcuCgogICAgbXkgJFN0cmluZ1JlZiA9ICRDaGVja0l0ZW1PYmplY3QtPlN0cmluZ0NsZWFuKAogICAgICAgIFN0cmluZ1JlZiAgICAgICAgICAgICAgID0+IFwnU3RyaW5nJywKICAgICAgICBUcmltTGVmdCAgICAgICAgICAgICAgICA9PiAwLCAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMQogICAgICAgIFRyaW1SaWdodCAgICAgICAgICAgICAgID0+IDAsICAjIChvcHRpb25hbCkgZGVmYXVsdCAxCiAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgICAgICAgPT4gMSwgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAKICAgICAgICBSZW1vdmVBbGxUYWJzICAgICAgICAgICA9PiAxLCAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMAogICAgICAgIFJlbW92ZUFsbFNwYWNlcyAgICAgICAgID0+IDEsICAjIChvcHRpb25hbCkgZGVmYXVsdCAwCiAgICAgICAgUmVwbGFjZVdpdGhXaGl0ZVNwYWNlICAgPT4gMSwgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAKICAgICk7Cgo9Y3V0CgpzdWIgU3RyaW5nQ2xlYW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICEkUGFyYW17U3RyaW5nUmVmfSB8fCByZWYgJFBhcmFte1N0cmluZ1JlZn0gbmUgJ1NDQUxBUicgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGEgc2NhbGFyIHJlZmVyZW5jZSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtTdHJpbmdSZWZ9IGlmICFkZWZpbmVkICR7ICRQYXJhbXtTdHJpbmdSZWZ9IH07CiAgICByZXR1cm4gJFBhcmFte1N0cmluZ1JlZn0gaWYgJHsgJFBhcmFte1N0cmluZ1JlZn0gfSBlcSAnJzsKCiAgICAjIGNoZWNrIGZvciBpbnZhbGlkIHV0ZjggY2hhcmFjdGVycyBhbmQgcmVtb3ZlIGludmFsaWQgc3RyaW5ncwogICAgaWYgKCAhdXRmODo6dmFsaWQoICR7ICRQYXJhbXtTdHJpbmdSZWZ9IH0gKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlJlbW92ZWQgc3RyaW5nIGNvbnRhaW5pbmcgaW52YWxpZCB1dGY4OiAnJHsgJFBhcmFte1N0cmluZ1JlZn0gfSchIiwKICAgICAgICApOwogICAgICAgICR7ICRQYXJhbXtTdHJpbmdSZWZ9IH0gPSAnJzsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgICRQYXJhbXtUcmltTGVmdH0gID0gZGVmaW5lZCAkUGFyYW17VHJpbUxlZnR9ICA/ICRQYXJhbXtUcmltTGVmdH0gIDogMTsKICAgICRQYXJhbXtUcmltUmlnaHR9ID0gZGVmaW5lZCAkUGFyYW17VHJpbVJpZ2h0fSA/ICRQYXJhbXtUcmltUmlnaHR9IDogMTsKCiAgICBteSAlVHJpbUFjdGlvbiA9ICgKICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiBxcnsgKFxuXHJ8XG58XHJ8XGYpKyB9eG1zLAogICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IHFyeyBcdCAgICAgICB9eG1zLAogICAgICAgIFJlbW92ZUFsbFNwYWNlcyAgID0+IHFyeyBbIF0gICAgICB9eG1zLAogICAgICAgIFRyaW1MZWZ0ICAgICAgICAgID0+IHFyeyBcQSBccysgICB9eG1zLAogICAgICAgIFRyaW1SaWdodCAgICAgICAgID0+IHFyeyBccysgXHogICB9eG1zLAogICAgKTsKCiAgICBBQ1RJT046CiAgICBmb3IgbXkgJEFjdGlvbiAoIHNvcnQga2V5cyAlVHJpbUFjdGlvbiApIHsKICAgICAgICBuZXh0IEFDVElPTiBpZiAhJFBhcmFteyRBY3Rpb259OwogICAgICAgIG15ICRSZXBsYWNlV2l0aCA9ICcnOwoKICAgICAgICAjIENoZWNrIGlmIE5ld2xpbmUgb3IgVGFicyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIHdoaXRlc3BhY2UKICAgICAgICBpZiAoCiAgICAgICAgICAgICRQYXJhbXtSZXBsYWNlV2l0aFdoaXRlU3BhY2V9CiAgICAgICAgICAgICYmICggJEFjdGlvbiBlcSAnUmVtb3ZlQWxsTmV3bGluZXMnIHx8ICRBY3Rpb24gZXEgJ1JlbW92ZUFsbFRhYnMnICkKICAgICAgICAgICAgJiYgISRQYXJhbXtSZW1vdmVBbGxTcGFjZXN9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRSZXBsYWNlV2l0aCA9ICcgJzsKICAgICAgICB9CiAgICAgICAgJHsgJFBhcmFte1N0cmluZ1JlZn0gfSA9fiBzeyAkVHJpbUFjdGlvbnskQWN0aW9ufSB9eyRSZXBsYWNlV2l0aH14bXNnOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17U3RyaW5nUmVmfTsKfQoKPWhlYWQyIENyZWRpdENhcmRDbGVhbigpCgpjbGVhbiBhIGdpdmVuIHN0cmluZyBhbmQgcmVtb3ZlIGNyZWRpdCBjYXJkCgogICAgbXkgKCRTdHJpbmdSZWYsICRGb3VuZCkgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DcmVkaXRDYXJkQ2xlYW4oCiAgICAgICAgU3RyaW5nUmVmID0+IFwnU3RyaW5nJywKICAgICk7Cgo9Y3V0CgpzdWIgQ3JlZGl0Q2FyZENsZWFuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhJFBhcmFte1N0cmluZ1JlZn0gfHwgcmVmICRQYXJhbXtTdHJpbmdSZWZ9IG5lICdTQ0FMQVInICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBhIHNjYWxhciByZWZlcmVuY2UhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAoICRQYXJhbXtTdHJpbmdSZWZ9LCAwICkgaWYgJHsgJFBhcmFte1N0cmluZ1JlZn0gfSBlcSAnJzsKICAgIHJldHVybiAoICRQYXJhbXtTdHJpbmdSZWZ9LCAwICkgaWYgIWRlZmluZWQgJHsgJFBhcmFte1N0cmluZ1JlZn0gfTsKCiAgICAjIHN0cmlwIGNyZWRpdCBjYXJkIG51bWJlcnMKICAgIG15ICRDb3VudCA9IDA7CiAgICAkeyAkUGFyYW17U3RyaW5nUmVmfSB9ID1+IHN7CiAgICAgICAgXGIoXGR7NH0pKFxzfFwufFwrfF98LXxcXHwvKShcZHs0fSkoXHN8XC58XCt8X3wtfFxcfC98KShcZHs0fSkoXHN8XC58XCt8X3wtfFxcfC8pKFxkezMsNH0pXGIKICAgIH0KICAgIHsKICAgICAgICAkQ291bnQrKzsKICAgICAgICAiJDEkMlhYWFgkNFhYWFgkNiQ3IjsKICAgIH1lZ3g7CgogICAgcmV0dXJuICRQYXJhbXtTdHJpbmdSZWZ9LCAkQ291bnQ7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0CgAAAAAAAAAAVCkAAAAAAAAAAAAAAAAAAAAAAABUKQAAAAAAAAAAAAA",
-					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD+AQAAAAAAAP4BAAAAAAAAAAAAAAAA8L8"
-				]
-			]
-		}
-	],
-	"build_system": "",
-	"build_system_choices":
-	[
-	],
-	"build_varint": "",
-	"command_palette":
-	{
-		"height": 0.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"json",
-				"Pretty JSON: Format JSON"
-			],
-			[
-				"add",
-				"Znuny: Add Folder to Project"
-			],
-			[
-				"project",
-				"Project: Refresh Folders"
-			],
-			[
-				"proje",
-				"Project: Edit"
-			],
-			[
-				"subltest",
-				"SublimeTest is the new feature... 1"
-			],
-			[
-				"sejson",
-				"Set Syntax: JSON"
-			],
-			[
-				"ta",
-				"MarkdownTableFormatter: format table"
-			],
-			[
-				"set pe",
-				"Set Syntax: Perl"
-			],
-			[
-				"set ht",
-				"Set Syntax: HTML"
-			],
-			[
-				"ad",
-				"Znuny: Add Folder to Project"
-			],
-			[
-				"github",
-				"Set Syntax: Github Actions"
-			],
-			[
-				"Package Control: Create Package Fil",
-				"Package Control: Create Package File"
-			],
-			[
-				"package",
-				"Preferences: Browse Packages"
-			],
-			[
-				"Package Control: Create Package File",
-				"Package Control: Create Package File"
-			],
-			[
-				"cust",
-				"Znuny: Customizer"
-			],
-			[
-				"set jo",
-				"Set Syntax: JSON"
-			],
-			[
-				"set jon",
-				"Set Syntax: JSON"
-			],
-			[
-				"mar",
-				"Markdown Preview: Preview in Browser"
-			],
-			[
-				"mark",
-				"Markdown Preview: Preview in Browser"
-			],
-			[
-				"set p",
-				"Set Syntax: Python"
-			],
-			[
-				"pack li",
-				"Package Control: List Packages"
-			],
-			[
-				"zn",
-				"Znuny: Add Folder to Project"
-			],
-			[
-				"ins",
-				"Package Control: Install Package"
-			],
-			[
-				"a",
-				"Znuny: Add Folder to Project"
-			],
-			[
-				"z",
-				"Znuny: Add Folder to Project"
-			],
-			[
-				"ZNUNAD",
-				"Znuny: Add Folder to Project"
-			],
-			[
-				"m",
-				"Markdown Preview: Preview in Browser"
-			],
-			[
-				"fet",
-				"GitHubFileFetcher: Searches and fetches files from GitHub."
-			],
-			[
-				"znuny",
-				"Znuny: Add Folder to Project"
-			],
-			[
-				"fetc",
-				"GitHubFileFetcher: Searches and fetches files from GitHub."
-			],
-			[
-				"fe",
-				"GitHubFileFetcher: Searches and fetches files from GitHub."
-			],
-			[
-				"gith",
-				"GitHubFileFetcher: Searches and fetches files from GitHub."
-			],
-			[
-				"set py",
-				"Set Syntax: Python"
-			],
-			[
-				"githu",
-				"GitHubFileFetcher: Searches and fetches files from GitHub."
-			],
-			[
-				"qu",
-				"Znuny: Quote with Marker"
-			],
-			[
-				"set",
-				"Set Syntax: HTML"
-			],
-			[
-				"quo",
-				"Znuny: Quote with Marker"
-			],
-			[
-				"set ",
-				"Set Syntax: Ruby"
-			],
-			[
-				"set per",
-				"Set Syntax: Perl"
-			],
-			[
-				"qou",
-				"Znuny: Quote with Marker"
-			],
-			[
-				"ChannelRepositoryTools: Test Default Channel",
-				"ChannelRepositoryTools: Test Default Channel"
-			],
-			[
-				"install",
-				"Package Control: Install Package"
-			],
-			[
-				"q",
-				"QuoteWithMarker: Quote with Marker."
-			],
-			[
-				"qout",
-				"QuoteWithMarker: Quote with Marker."
-			],
-			[
-				"qo",
-				"Git: Quick Commit (repo, only already added files)"
-			],
-			[
-				"py",
-				"Set Syntax: Python (Colorcode)"
-			],
-			[
-				"set h",
-				"Set Syntax: HTML"
-			],
-			[
-				"tabl",
-				"MarkdownTableFormatter: format table"
-			],
-			[
-				"packa",
-				"Package Control: Remove Package"
-			],
-			[
-				"set ac",
-				"Set Syntax: ActionScript"
-			],
-			[
-				"set bat",
-				"Set Syntax: Batch File"
-			],
-			[
-				"diff",
-				"Set Syntax: Diff"
-			],
-			[
-				"set ma",
-				"Set Syntax: Markdown"
-			],
-			[
-				"setper",
-				"Set Syntax: Perl"
-			],
-			[
-				"pac",
-				"Package Control: List Packages"
-			],
-			[
-				"waka",
-				"WakaTime: Open Dashboard"
-			],
-			[
-				"Package Control: Install Package",
-				"Package Control: Install Package"
-			],
-			[
-				"ma",
-				"Markdown Preview: Preview in Browser"
-			],
-			[
-				"inst",
-				"Package Control: Install Package"
-			],
-			[
-				"set js",
-				"Set Syntax: JavaScript"
-			],
-			[
-				"set css",
-				"Set Syntax: CSS"
-			],
-			[
-				"set c",
-				"Set Syntax: CSS"
-			],
-			[
-				"set cs",
-				"Set Syntax: CSS"
-			],
-			[
-				"martab",
-				"MarkdownTableFormatter: format table"
-			],
-			[
-				"table",
-				"MarkdownTableFormatter: format table"
-			],
-			[
-				"cop",
-				"Copilot: Get Panel Completions"
-			],
-			[
-				"crea",
-				"Package Control: Create Package File"
-			],
-			[
-				"css",
-				"Set Syntax: CSS"
-			],
-			[
-				"copi",
-				"Copilot: Get Version"
-			],
-			[
-				"Create Package",
-				"Package Control: Create Package File"
-			],
-			[
-				"bla",
-				"Git: Blame"
-			],
-			[
-				"insta",
-				"Package Control: Install Package"
-			],
-			[
-				"instal",
-				"Package Control: Install Package"
-			],
-			[
-				"set perl",
-				"Set Syntax: Perl"
-			],
-			[
-				"set xml",
-				"Set Syntax: XML"
-			],
-			[
-				"set x",
-				"Set Syntax: XML"
-			],
-			[
-				"remo",
-				"Package Control: Remove Package"
-			],
-			[
-				"j",
-				"Pretty JSON: Format JSON"
-			],
-			[
-				"seth",
-				"Set Syntax: HTML"
-			],
-			[
-				"yml",
-				"Set Syntax: YAML"
-			],
-			[
-				"set ja",
-				"Set Syntax: JavaScript"
-			],
-			[
-				"set yml",
-				"Set Syntax: YAML"
-			],
-			[
-				"xml",
-				"Set Syntax: XML"
-			],
-			[
-				"ejs",
-				"Set Syntax: JavaScript"
-			],
-			[
-				"set mar",
-				"Set Syntax: Markdown"
-			],
-			[
-				"linter perl",
-				"Preferences: SublimeLinter Settings"
-			],
-			[
-				"i",
-				"Package Control: Install Package"
-			],
-			[
-				"re",
-				"Package Control: Remove Package"
-			],
-			[
-				"li",
-				"Package Control: List Packages"
-			],
-			[
-				"list",
-				"Package Control: List Packages"
-			],
-			[
-				"rem",
-				"Package Control: Remove Package"
-			],
-			[
-				"jo",
-				"Pretty JSON: Format JSON"
-			],
-			[
-				"in",
-				"Package Control: Install Package"
-			],
-			[
-				"set htt",
-				"Set Syntax: HTML+TT3"
-			]
-		],
-		"width": 0.0
-	},
-	"console":
-	{
-		"height": 333.0,
-		"history":
-		[
-			"webbrowser.open_new_tab(\"file://\" + self.view.file_name())",
-			"view.substr(view.extract_scope(view.sel()[0].a))",
-			"view.substr(self.view.extract_scope(view.sel()[0].a))",
-			"        # ScopeName = self.view.scope_name(self.view.sel()[0].a)\nview.substr(self.view.extract_scope(self.view.sel()[0].a))",
-			"        # ScopeName = self.view.scope_name(self.view.sel()[0].a)\n        # ScopeText = self.view.substr(self.view.extract_scope(self.view.sel()[0].a))",
-			"view.log_commands(\"toggle_setting\")",
-			"log_commands('sd')",
-			"sublime.error_message('some message')",
-			"sublime.message_dialog('some message')",
-			"view.run_command(\"toggle_setting\", {\"setting\": \"word_wrap\"})",
-			"self.view.run_command(\"toggle_setting\", {\"setting\": \"word_wrap\"})",
-			"view.settings().set('syntax', 'Packages/Tidea/Tidea.tmLanguage')",
-			"self.view.settings().set('syntax', 'Packages/Tidea/Tidea.tmLanguage')",
-			"sublime.set_clipboard('some message')",
-			"view.run_command('sublime_test')",
-			"view.run_command('sublime_test_2')",
-			"view.run_command('sublime_test')",
-			"view.run_command('SublimeTest')",
-			"python -v",
-			"version",
-			"python --version",
-			"sublime.status_message('Showing branch selection.')",
-			"sublime.error_message('sdfsdf')",
-			"sublime.status_message('sdfsdf')",
-			"sublime.error_message('sdfsdf')",
-			"sublime.error_message(''')",
-			"sublime.message_dialog('123')",
-			"sublime.status_message('fetching branches from .')",
-			"sublime.status_message('fetching branches from \"%s\".' % '123')",
-			"sublime.status_message('fetching branches from \"%s\".' % url)",
-			"window.show_input_panel(\n            caption = \"Enter Session ID\",\n            initial_text = \"\",\n            on_done = None,\n            on_change = None,\n            on_cancel = None,\n        )",
-			"window.show_quick_panel(\n            items = ['a','b','c'],\n            on_select = None,\n            flags = 32,\n            selected_index = -1,\n            on_highlight = None,\n            placeholder = 'placeholder',\n        )",
-			"window.show_quick_panel(\n        items = ['a','b','c']\n        on_select = None\n        flags = 32,\n        selected_index = -1\n        on_highlight = None\n        placeholder = 'placeholder'\n    )",
-			"window.active_view().show_popup(\n            content = \"WhatsUp\",\n            flags = 32,\n            location = -1,\n            max_width = 320,\n            max_height = 240,\n            on_navigate = None,\n            on_hide = None\n        )",
-			"self.window.active_view().show_popup(\n            content = \"WhatsUp\",\n            flags = 32,\n            location = -1,\n            max_width = 320,\n            max_height = 240,\n            on_navigate = None,\n            on_hide = None\n        )",
-			"sublime.active_window().show_input_panel(\n            caption = \"Enter Session ID\",\n            initial_text = \"\",\n            on_done = None,\n            on_change = None,\n            on_cancel = None,\n        )",
-			"ime.active_window().show_input_panel(\n            caption=\"Enter Session ID\",\n            initial_text=\"\",\n            on_done=None,\n            on_change=None,\n            on_cancel=None,\n        )",
-			"sublime.active_window().show_input_panel(\n            caption=\"Enter Session ID\",\n            initial_text=\"\",\n            on_done=None,\n            on_change=None,\n            on_cancel=None,\n        ) ",
-			"sublime.active_window().show_input_panel(\n            caption=\"Enter Session ID\",\n            initial_text=\"\",\n            on_done=self._start,\n            on_change=None,\n            on_cancel=None,\n        ) ",
-			"sel()",
-			"view.sel()",
-			"window.active_view().update_popup('The Text other line 2')",
-			"window.active_view().show_popup('The Text other line', max_width=100)",
-			"self.window.active_view().show_popup('The Text other line', max_width=100)",
-			"view.show_popup('The Text other line', max_width=100)",
-			"view.show_popup('Enter GitHub ${value} Example: VSCode-GitHubFileFetcher')",
-			"view.show_popup('Enter GitHub ${value} Example: VSCode-GitHubFileFetcher', max_width=200)",
-			"view.show_popup('Enter GitHub ${value} Example: VSCode-GitHubFileFetcher', max_width=100)",
-			"view.show_popup('The Text other line', max_width=900)",
-			"view.show_popup('The Text other line', max_width=90)",
-			"view.show_popup('The Text other line', max_width=100)",
-			"view.show_popup('The Text other line', max_width=100, None)",
-			"view.show_popup('The Text other line', max_width=100, on_hide=self.done)",
-			"self.view.show_popup('The Text other line', max_width=100, on_hide=self.done)",
-			"self.view.show_popup(\n            'The Text other line', max_width=100, on_hide=self.done)",
-			"view.show_popup_menu()",
-			"view.show_popup_menu(items, self.on_done)",
-			"sublime.active_window().show_popup()",
-			"show_popup",
-			"show_popup_menu()",
-			".show_popup_menu()",
-			"active_window().show_popup_menu()",
-			"sublime.active_window().show_popup_menu()",
-			"sublime.active_window().show_input_panel('query', 'hello', self.test, self.test, self.test)",
-			"sublime.active_window().show_input_panel('123','initial_text', 'on_done', 'on_change', 'on_cancel')",
-			"sublime.active_window().show_input_panel('','initial_text', 'on_done', 'on_change', 'on_cancel')",
-			"sublime.active_window().show_input_panel('','initial_text', 'on_done', 'on_change', and 'on_cancel')",
-			"sublime.active_window().show_input_panel('')",
-			"sublime.active_window().show_input_panel()",
-			"show_input_panel(\"\")\n",
-			"self.show_input_panel(\"\")\n",
-			"view.window().show_input_panel('query', 'hello')",
-			"view.window().show_input_panel('query', 'hello', self.on_done, self.on_change, self.on_cancel)",
-			"    self.view.window().show_input_panel('query', 'hello', self.on_done, self.on_change, self.on_cancel)\n    self.view.window().show_input_panel('query', 'hello', self.on_done, self.on_change, self.on_cancel)\n    self.view.window().show_input_panel('query', 'hello', self.on_done, self.on_change, self.on_cancel)\n    self.view.window().show_input_panel('query', 'hello', self.on_done, self.on_change, self.on_cancel)\nself.view.window().show_input_panel('query', 'hello', self.on_done, self.on_change, self.on_cancel)",
-			"view.meta_info('shellVariables', 0)",
-			"view.meta_info('shellVariables', 0) if var['name'] == 'TM_COMMENT_START'][0]",
-			"view.meta_info('shellVariables', 0)",
-			"self.view.meta_info('shellVariables', 0)",
-			"view.meta_info('shellVariables', 0) if var['name'] == 'TM_COMMENT_START'][0]",
-			"print(comment_characters)",
-			"comment_characters = [var['value'] for var in view.meta_info('shellVariables', 0) if var['name'] == 'TM_COMMENT_START'][0]",
-			"comment_characters = [var['value'] for var in view.meta_info('shellVariables', 0) if var['name'] == 'TM_COMMENT_START'][0]\ncomment_characters = [var['value'] for var in view.meta_info('shellVariables', 0) if var['name'] == 'TM_COMMENT_START'][0]",
-			"view.meta_info('shellVariables', 0).[0]",
-			"view.meta_info('shellVariables', 0)",
-			"view.run_command('add_comment')",
-			"view.run_command('toggle_comment')",
-			"view.run_command('toggle_comment', {'block': false})",
-			"view.run_command('toggle_comment', {'block': True})",
-			"view.run_command('toggle_comment', {'block': True})\nview.run_command('toggle_comment', {'block': True})\nview.run_command('toggle_comment', {'block': True})",
-			"view.run_command('remove_comments')",
-			"view.run_command('add_comments')",
-			"view.run_command('comment_toggle');",
-			"view.run_command('comment_toggle')",
-			"view.run_command('comment')",
-			"view.find_by_selector('file_extensions')",
-			"view.find_by_selector('source.applescript')",
-			"view.find_by_selector(source.applescript)",
-			"view.settings().get(name)",
-			"view.settings().get('name')",
-			"view.settings().get('file_extensions')",
-			"view.settings()",
-			"view.scope_name(view.sel()[0].begin()).strip().replace(\" \", 'spacing')",
-			"view.scope_name(view.sel()[0].begin()).strip().replace(\" \", spacing)",
-			"view.scope_name(view.sel()[0].begin().strip().replace(\" \", spacing)",
-			"view.scope_name(view.sel()[0].begin().strip().replace(\" \", spacing))",
-			"view.scope_name(view.sel()[0].begin()).strip().replace(\" \", spacing))",
-			"view.scope_name(view.sel()[0].begin()).strip().replace(\" \", spacing)",
-			"view.scope_name(view.sel()[0].begin()).strip()",
-			"view.find_by_selector('source.applescript')",
-			"view.find_by_selector(source.applescript)",
-			"str = \" \" # empty string  \n# Calling function  \nstr2 = str.isspace()  \n# Displaying result  \nprint(str2)  ",
-			"view.scope_name(view.sel()[0].begin())",
-			"self.view.scope_name(view.sel()[0].begin())",
-			"view.scope_name(self.view.sel()[0].begin())",
-			"self.view.scope_name(self.view.sel()[0].begin())",
-			"view.settings().get('syntax')",
-			"self.view.settings().get('syntax')",
-			"view.scope_name(view.sel()[0].begin())",
-			"markup.quote",
-			"flake",
-			"view.size()",
-			"clear",
-			"colorcoder.colorcode(view)",
-			"view.settings().set('colorcode','False')",
-			"view.settings().set('colorcode',not cc)",
-			" view.settings().set('colorcode',not cc)",
-			"colorcoder.colorcode(view)",
-			"view.run_command(\"colorcode\")"
-		]
-	},
-	"distraction_free":
-	{
-		"menu_visible": true,
-		"show_minimap": false,
-		"show_open_files": false,
-		"show_tabs": false,
-		"side_bar_visible": false,
-		"status_bar_visible": false
-	},
-	"expanded_folders":
-	[
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/menu",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/templates",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/readme",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/setting",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/snippet",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/src"
-	],
-	"file_history":
-	[
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/plugin/config.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/projects/DELETEME.sublime-project",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Config/Files/ZZZAAuto.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Modules/AgentTicketZoom.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom.tt",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/0001-782-Bug-Empty-block-horizontal-line-dynamic-field-gr.patch",
-		"/Users/dennykorsukewitz/workspace/znuny/git/Znuny4OTRS-FollowUpTime/var/packagesetup/ZnunyFollowUpTime.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/git/Znuny4OTRS-FollowUpTime/Znuny-FollowUpTime.sopm",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/src/znuny.js",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/__tests__/src/znuny.test.js",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/src/sopm.js",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/CHANGES.md",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/coverage/lcov-report/src/sopm.js.html",
-		"/Users/dennykorsukewitz/workspace/znuny/git/Znuny4OTRS-FollowUpTime/Kernel/System/PostMaster/Filter/PreZnunyFollowUpTime.pm",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/generators/package_setup/config.js",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/generators/package_setup/templates/6-x/PackageSetup.pm",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/README.md",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/generators/package_setup/index.js",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/src/helper.js",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/SysConfig/Migration.pm",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/command/USAGE",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/README.md",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/completions/templates/completions.sublime-completions",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/completions/SublimeTest.sublime-completions",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/completions/config.js",
-		"/Users/dennykorsukewitz/Library/Application Support/Sublime Text 3/Packages/Default/Default (OSX).sublime-keymap",
-		"/Users/dennykorsukewitz/Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/commands/SublimeTest.sublime-commands",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/DELETEME.sublime-project",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/menu/index.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/completions/index.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/keymaps/Default (OSX).sublime-keymap",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/keymap/index.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/commands/index.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/menu/Find in Files.sublime-menu",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/menu/Context.sublime-menu",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/completions/USAGE",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/completions/completions.sublime-completions",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/CHANGELOG.md",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/keymap/config.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/menu/config.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/readme/config.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/settings/config.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/app/config.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/commands/config.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/snippet/config.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/__tests__/generators/app.test.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/__tests__/generators/readme.test.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/TODO.md",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/Context.sublime-menu",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/package.json",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/__tests__/generators/acl.test.js",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/readme/USAGE",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/.gitignore",
-		"/Users/dennykorsukewitz/workspace/znuny/git/BR-Privacy/BR-Privacy.sopm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/GenericInterface/Invoker/Ticket/Generic.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/System/UnitTest/Helper.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/git/BR-Privacy/Kernel/System/GenericAgent/BRPrivacy.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/git/BR-Privacy/scripts/test/BRPrivacy/GenericAgent/BRPrivacy.t",
-		"/Users/dennykorsukewitz/workspace/znuny/git/BR-Privacy/doc/de/config.md",
-		"/Users/dennykorsukewitz/workspace/znuny/git/BR-Privacy/doc/de/feature.md",
-		"/Users/dennykorsukewitz/workspace/znuny/git/BR-Privacy/.yo-rc.json",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/GenericInterface/Operation/Ticket/TicketCreate.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/System/Ticket/Article.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/GenericInterface/Operation/Ticket/TicketUpdate.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/System/Ticket.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/git/BR-Privacy/Kernel/Config/Files/XML/BRPrivacy.xml",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/System/ZnunyHelper.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/Output/HTML/ArticleCheck/PGP.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/GenericInterface/Operation/Ticket/Common.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/System/DynamicField.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/scripts/test/GenericAgent/Module.t",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/GenericAgent/AutoPriorityIncrease.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/GenericAgent/NotifyAgentGroupWithWritePermission.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/scripts/test/GenericAgent/AllowCustomCodeExecution.t",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/scripts/test/GenericAgent.t",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/generators/generic_agent/config.js",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-PackageGenerator/generators/generic_agent/index.js",
-		"/Users/dennykorsukewitz/workspace/znuny/git/BR-Privacy/script/test/BRPrivacy/System/GenericAgent/BRPrivacy.t",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/scripts/test/BRPrivacy/GenericAgent/BRPrivacy.t",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Config/Files/XML/Ticket.xml",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Config/Files/XML/Calendar.xml",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/scripts/test/Config/Defaults.t",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Config/Defaults.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Config/Files/XML/Framework.xml",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/scripts/Migration/Znuny/MigrateSysConfigSettings.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/Console/Command/Dev/Tools/BundledModulesUpdate.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_dev/.git/MERGE_MSG",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz/.github/metrics/data/sublime.json",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz/.github/metrics/data/sublime-data.json",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz/.github/workflows/metrics/sublime.sh",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz/.github/workflows/metrics.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz/.github/workflows/reusable.lint.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/.github/settings.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-GitHubFileFetcher/.github/settings.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-AddFolderToProject/.github/settings.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/.github/settings.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz.github.io/_tabs/metrics.md",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/.github/workflows/lint.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz/.github/workflows/lint.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz.github.io/.github/workflows/pages/posts.sh",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz.github.io/.github/workflows/pages/monitoring.sh",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz.github.io/.github/workflows/lint.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz.github.io/.gitignore",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz.github.io/_data/repositories.yml",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/dennykorsukewitz.github.io/.github/workflows/pages/pages.sh",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/README.md",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-AddFolderToProject/Main.sublime-menu",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/QuoteWithMarker.py",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/QuoteWithMarker.sublime-commands",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/QuoteWithMarker.sublime-settings",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-GitHubFileFetcher/README.md",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-AddFolderToProject/README.md",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/messages.json",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/Main.sublime-menu",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/TODO.md",
-		"/Users/dennykorsukewitz/.gitconfig",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-GitHubFileFetcher/Main.sublime-menu",
-		"/Users/dennykorsukewitz/workspace/tools/Znuny-Sublime/messages/changelog.txt",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/messages/version.txt",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/messages/install.txt",
-		"/Users/dennykorsukewitz/workspace/dennykorsukewitz/Sublime-QuoteWithMarker/messages/changelog.txt",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/Modules/AdminCustomerUserService.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/git/Znuny4OTRS-CustomerCompanyService/Custom/Kernel/Modules/AdminCustomerUserService.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/znuny_65/Kernel/System/CustomerCompany.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/git/Znuny4OTRS-CustomerCompanyService/Kernel/Output/HTML/Templates/Standard/AdminCustomerCompanyService.tt",
-		"/Users/dennykorsukewitz/workspace/znuny/git/Znuny4OTRS-CustomerCompanyService/Kernel/Modules/AdminCustomerCompanyService.pm",
-		"/Users/dennykorsukewitz/workspace/znuny/git/Znuny4OTRS-CustomerCompanyService/Custom/Kernel/Output/HTML/Templates/Standard/AdminService.tt"
-	],
-	"find":
-	{
-		"height": 49.0
-	},
-	"find_in_files":
-	{
-		"height": 277.0,
-		"where_history":
-		[
-			"/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators",
-			""
-		]
-	},
-	"find_state":
-	{
-		"case_sensitive": false,
-		"find_history":
-		[
-			"project_file_name",
-			"priority:",
-			"command",
-			"package_name",
-			"\t",
-			"file_include_patterns",
-			"command_",
-			"command",
-			"commands",
-			"Cwd",
-			"if ( !$Param{File} ) {",
-			"504",
-			"ProcessWidgetDynamicFieldGroups",
-			"ProcessWidgetDynamicField",
-			"ProcessWidgetDynamicFieldGroupSeparator",
-			"ProcessWidgetDynamicFieldGroups",
-			"DynamicField_",
-			"ProcessWidg",
-			"Process",
-			" = $Self->{DisplaySettings}->{ProcessWidg",
-			"Process",
-			" = $Self->{DisplaySettings}->{ProcessWidg",
-			"/issues/",
-			"config.sopm_structure.name.match(patt",
-			"4",
-			"13",
-			"_SetupMigrateSysConfigSettings",
-			"_MigrateSysConfigSettings",
-			"Setup",
-			"'Setup",
-			"->_Setup",
-			"_Setup",
-			"_ModuleGroupAdd",
-			"'_Setup",
-			"_Setup",
-			"package_setup_module",
-			"tup_module == '",
-			"package_setup_module",
-			"_SetupLoaderRemove",
-			"value:   '",
-			"package_setup_module",
-			"_Setup",
-			"Self-><%=",
-			" _Setup",
-			"'_Setup",
-			"_Setup",
-			"value:  '",
-			"=head2 _Setup",
-			"_Setup<%",
-			"_Setup",
-			" _Setup",
-			"_Setup",
-			"MigrateSysConfigSettings",
-			"_SetupMigrateSysConfigSettings",
-			"  // force conflict = overwrite file if already exists\n  Generator.env.conflicter.force = true;",
-			"write file ",
-			"conflicter",
-			"searchString",
-			"secondPart",
-			"_MigrateSysConfigSettings",
-			"ModuleGroupAdd",
-			"name:"
-		],
-		"highlight": true,
-		"in_selection": false,
-		"preserve_case": false,
-		"regex": false,
-		"replace_history":
-		[
-		],
-		"reverse": false,
-		"scrollbar_highlights": true,
-		"show_context": true,
-		"use_buffer2": true,
-		"use_gitignore": false,
-		"whole_word": false,
-		"wrap": true
-	},
-	"groups":
-	[
-		{
-			"sheets":
-			[
-				{
-					"buffer": 0,
-					"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/CHANGES.md",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 985242,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								0,
-								0
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-								},
-								"icon":
-								{
-								},
-								"open":
-								{
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": false,
-							"copilot.completion._is_modified": true,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 0,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/znuny/znuny_dev/CHANGES.md",
-							"syntax": "Packages/Markdown/Markdown.sublime-syntax"
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 9,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 1,
-					"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/USAGE",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 323,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								137,
-								137
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-								},
-								"icon":
-								{
-								},
-								"open":
-								{
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 1,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/USAGE",
-							"syntax": "Packages/Text/Plain text.tmLanguage",
-							"tab_size": 4,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 10,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 2,
-					"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/config.js",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 645,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								262,
-								279
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-									"1":
-									[
-										279,
-										280
-									]
-								},
-								"icon":
-								{
-									"1":
-									[
-										"Packages/BracketHighlighter/icons/single_quote.png",
-										"region.greenish"
-									]
-								},
-								"open":
-								{
-									"1":
-									[
-										261,
-										262
-									]
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 9,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/config.js",
-							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 2,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 3,
-					"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/setting/config.js",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 435,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								144,
-								144
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-									"1":
-									[
-										408,
-										409
-									]
-								},
-								"icon":
-								{
-									"1":
-									[
-										"Packages/BracketHighlighter/icons/curly_bracket.png",
-										"region.purplish"
-									]
-								},
-								"open":
-								{
-									"1":
-									[
-										15,
-										16
-									]
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 3,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/setting/config.js",
-							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 3,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 4,
-					"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/snippet/config.js",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 1217,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								181,
-								181
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-									"1":
-									[
-										1190,
-										1191
-									]
-								},
-								"icon":
-								{
-									"1":
-									[
-										"Packages/BracketHighlighter/icons/curly_bracket.png",
-										"region.purplish"
-									]
-								},
-								"open":
-								{
-									"1":
-									[
-										15,
-										16
-									]
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 3,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/snippet/config.js",
-							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 4,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 5,
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 79378,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								0,
-								0
-							]
-						],
-						"settings":
-						{
-							"auto_complete_triggers":
-							[
-								{
-									"characters": "<",
-									"selector": "text.html, text.xml"
-								},
-								{
-									"rhs_empty": true,
-									"selector": "punctuation.accessor"
-								}
-							],
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-								},
-								"icon":
-								{
-								},
-								"open":
-								{
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion.is_visible": false,
-							"default_dir": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/readme",
-							"function_name_status_row": 0,
-							"lsp_uri": "buffer://sublime/4151",
-							"syntax": "Packages/Default/Find Results.hidden-tmLanguage"
-						},
-						"translation.x": 0.0,
-						"translation.y": 30487.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 7,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 6,
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 2763,
-						"regions":
-						{
-							"match":
-							{
-								"flags": 112,
-								"regions":
-								[
-									[
-										291,
-										300
-									],
-									[
-										628,
-										637
-									],
-									[
-										951,
-										960
-									],
-									[
-										1258,
-										1267
-									],
-									[
-										1525,
-										1534
-									],
-									[
-										1851,
-										1860
-									],
-									[
-										2077,
-										2086
-									],
-									[
-										2359,
-										2368
-									],
-									[
-										2678,
-										2687
-									]
-								],
-								"scope": ""
-							}
-						},
-						"selection":
-						[
-							[
-								1264,
-								1264
-							]
-						],
-						"settings":
-						{
-							"auto_complete_triggers":
-							[
-								{
-									"characters": "<",
-									"selector": "text.html, text.xml"
-								},
-								{
-									"rhs_empty": true,
-									"selector": "punctuation.accessor"
-								}
-							],
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-								},
-								"icon":
-								{
-								},
-								"open":
-								{
-								},
-								"unmatched":
-								{
-									"1":
-									[
-										984,
-										985
-									]
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion.is_visible": false,
-							"default_dir": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/readme",
-							"detect_indentation": false,
-							"function_name_status_row": 26,
-							"git_gutter_is_enabled": false,
-							"line_numbers": false,
-							"lsp_uri": "buffer://sublime/4154",
-							"output_tag": 1,
-							"result_base_dir": "",
-							"result_file_regex": "^([^ \t].*):$",
-							"result_line_regex": "^ +([0-9]+):",
-							"scroll_past_end": true,
-							"syntax": "Packages/Default/Find Results.hidden-tmLanguage",
-							"translate_tabs_to_spaces": false
-						},
-						"translation.x": 0.0,
-						"translation.y": 133.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 6,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 7,
-					"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/menu/config.js",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 1643,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								159,
-								159
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-									"1":
-									[
-										1616,
-										1617
-									]
-								},
-								"icon":
-								{
-									"1":
-									[
-										"Packages/BracketHighlighter/icons/curly_bracket.png",
-										"region.purplish"
-									]
-								},
-								"open":
-								{
-									"1":
-									[
-										15,
-										16
-									]
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 3,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/menu/config.js",
-							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 5,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 8,
-					"file": "project.sublime-project",
-					"selected": true,
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 604,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								430,
-								430
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-									"1":
-									[
-										529,
-										530
-									]
-								},
-								"icon":
-								{
-									"1":
-									[
-										"Packages/BracketHighlighter/icons/curly_bracket.png",
-										"region.purplish"
-									]
-								},
-								"open":
-								{
-									"1":
-									[
-										26,
-										27
-									]
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 9,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/templates/project.sublime-project",
-							"syntax": "Packages/zzz A File Icon zzz/aliases/JSON (Sublime).sublime-syntax",
-							"tab_size": 4,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 0,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 9,
-					"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/projects/DELETEME.sublime-project",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 686,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								305,
-								305
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-									"1":
-									[
-										675,
-										676
-									]
-								},
-								"icon":
-								{
-									"1":
-									[
-										"Packages/BracketHighlighter/icons/curly_bracket.png",
-										"region.purplish"
-									]
-								},
-								"open":
-								{
-									"1":
-									[
-										241,
-										242
-									]
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 9,
-							"git_gutter_is_enabled": false,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/projects/DELETEME.sublime-project",
-							"syntax": "Packages/zzz A File Icon zzz/aliases/JSON (Sublime).sublime-syntax",
-							"tab_size": 4,
-							"translate_tabs_to_spaces": false
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 8,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 10,
-					"file": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/index.js",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 2295,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								1792,
-								1792
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-									"1":
-									[
-										2039,
-										2040
-									]
-								},
-								"icon":
-								{
-									"1":
-									[
-										"Packages/BracketHighlighter/icons/curly_bracket.png",
-										"region.purplish"
-									]
-								},
-								"open":
-								{
-									"1":
-									[
-										1710,
-										1711
-									]
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 58,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/dennykorsukewitz/generator-sublime-package/generators/project/index.js",
-							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
-							"tab_size": 2,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 1,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 11,
-					"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/VariableCheck.pm",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 12140,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								0,
-								0
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-								},
-								"icon":
-								{
-								},
-								"open":
-								{
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 0,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/VariableCheck.pm",
-							"syntax": "Packages/User/Perl (Colorcoded).sublime-syntax",
-							"tab_size": 4,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 11,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 12,
-					"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Modules/AdminSystemFiles.pm",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 22596,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								0,
-								0
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-								},
-								"icon":
-								{
-								},
-								"open":
-								{
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": true,
-							"copilot.completion._is_saving": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 0,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/Modules/AdminSystemFiles.pm",
-							"syntax": "Packages/User/Perl (Colorcoded).sublime-syntax",
-							"tab_size": 4,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 13257.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 12,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 13,
-					"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/Main.pm",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 30301,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								0,
-								0
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-								},
-								"icon":
-								{
-								},
-								"open":
-								{
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 0,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/Main.pm",
-							"syntax": "Packages/User/Perl (Colorcoded).sublime-syntax",
-							"tab_size": 4,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 13,
-					"stack_multiselect": false,
-					"type": "text"
-				},
-				{
-					"buffer": 14,
-					"file": "/Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/CheckItem.pm",
-					"semi_transient": false,
-					"settings":
-					{
-						"buffer_size": 10580,
-						"regions":
-						{
-						},
-						"selection":
-						[
-							[
-								510,
-								510
-							]
-						],
-						"settings":
-						{
-							"bracket_highlighter.busy": false,
-							"bracket_highlighter.locations":
-							{
-								"close":
-								{
-								},
-								"icon":
-								{
-								},
-								"open":
-								{
-								},
-								"unmatched":
-								{
-								}
-							},
-							"bracket_highlighter.regions":
-							[
-								"bh_angle",
-								"bh_angle_center",
-								"bh_angle_open",
-								"bh_angle_close",
-								"bh_angle_content",
-								"bh_curly",
-								"bh_curly_center",
-								"bh_curly_open",
-								"bh_curly_close",
-								"bh_curly_content",
-								"bh_c_define",
-								"bh_c_define_center",
-								"bh_c_define_open",
-								"bh_c_define_close",
-								"bh_c_define_content",
-								"bh_default",
-								"bh_default_center",
-								"bh_default_open",
-								"bh_default_close",
-								"bh_default_content",
-								"bh_double_quote",
-								"bh_double_quote_center",
-								"bh_double_quote_open",
-								"bh_double_quote_close",
-								"bh_double_quote_content",
-								"bh_single_quote",
-								"bh_single_quote_center",
-								"bh_single_quote_open",
-								"bh_single_quote_close",
-								"bh_single_quote_content",
-								"bh_round",
-								"bh_round_center",
-								"bh_round_open",
-								"bh_round_close",
-								"bh_round_content",
-								"bh_square",
-								"bh_square_center",
-								"bh_square_open",
-								"bh_square_close",
-								"bh_square_content",
-								"bh_tag",
-								"bh_tag_center",
-								"bh_tag_open",
-								"bh_tag_close",
-								"bh_tag_content",
-								"bh_unmatched",
-								"bh_unmatched_center",
-								"bh_unmatched_open",
-								"bh_unmatched_close",
-								"bh_unmatched_content",
-								"bh_regex",
-								"bh_regex_center",
-								"bh_regex_open",
-								"bh_regex_close",
-								"bh_regex_content"
-							],
-							"colorcode": true,
-							"copilot.completion._is_modified": false,
-							"copilot.completion.is_visible": false,
-							"function_name_status_row": 20,
-							"git_gutter_is_enabled": true,
-							"lsp_uri": "file:///Users/dennykorsukewitz/workspace/znuny/znuny_dev/Kernel/System/CheckItem.pm",
-							"syntax": "Packages/User/Perl (Colorcoded).sublime-syntax",
-							"tab_size": 4,
-							"translate_tabs_to_spaces": true
-						},
-						"translation.x": 0.0,
-						"translation.y": 0.0,
-						"zoom_level": 1.0
-					},
-					"stack_index": 14,
-					"stack_multiselect": false,
-					"type": "text"
-				}
-			]
-		}
-	],
-	"incremental_find":
-	{
-		"height": 30.0
-	},
-	"input":
-	{
-		"height": 126.0
-	},
-	"layout":
-	{
-		"cells":
-		[
-			[
-				0,
-				0,
-				1,
-				1
-			]
-		],
-		"cols":
-		[
-			0.0,
-			1.0
-		],
-		"rows":
-		[
-			0.0,
-			1.0
-		]
-	},
-	"menu_visible": true,
-	"output.LSP Log Panel":
-	{
-		"height": 0.0
-	},
-	"output.SublimeLinter":
-	{
-		"height": 0.0
-	},
-	"output.diagnostics":
-	{
-		"height": 0.0
-	},
-	"output.find_results":
-	{
-		"height": 0.0
-	},
-	"output.mdpopups":
-	{
-		"height": 0.0
-	},
-	"pinned_build_system": "",
-	"project": "/Users/dennykorsukewitz/workspace/dennykorsukewitz/sublime-test/projects/DELETEME.sublime-project",
-	"replace":
-	{
-		"height": 56.0
-	},
-	"save_all_on_build": true,
-	"select_file":
-	{
-		"height": 0.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"main",
-				"znuny_dev/Kernel/System/Main.pm"
-			],
-			[
-				"check",
-				"znuny_dev/Kernel/System/CheckItem.pm"
-			],
-			[
-				"AdminSystemFiles",
-				"znuny_dev/Kernel/Modules/AdminSystemFiles.pm"
-			],
-			[
-				"AgentTicketZoom",
-				"znuny_dev/Kernel/Modules/AgentTicketZoom.pm"
-			],
-			[
-				"zzz",
-				"znuny_dev/Kernel/Config/Files/ZZZAAuto.pm"
-			],
-			[
-				"mig",
-				"znuny_dev/Kernel/System/SysConfig/Migration.pm"
-			],
-			[
-				"hel",
-				"znuny_65/Kernel/System/UnitTest/Helper.pm"
-			],
-			[
-				"package_setup",
-				"Znuny-PackageGenerator/generators/package_setup/config.js"
-			],
-			[
-				"zn",
-				"znuny_65/Kernel/System/ZnunyHelper.pm"
-			],
-			[
-				"article",
-				"znuny_65/Kernel/System/Ticket/Article.pm"
-			],
-			[
-				"tick",
-				"znuny_65/Kernel/System/Ticket.pm"
-			],
-			[
-				"dy",
-				"znuny_65/Kernel/System/DynamicField.pm"
-			],
-			[
-				"znh",
-				"znuny_65/Kernel/System/ZnunyHelper.pm"
-			],
-			[
-				"help",
-				"znuny_65/Kernel/System/UnitTest/Helper.pm"
-			],
-			[
-				"helper",
-				"znuny_65/Kernel/System/UnitTest/Helper.pm"
-			],
-			[
-				"GenericAgent.t",
-				"znuny_dev/scripts/test/GenericAgent/AllowCustomCodeExecution.t"
-			],
-			[
-				"GenericAgent/",
-				"znuny_dev/Kernel/System/GenericAgent/AutoPriorityIncrease.pm"
-			],
-			[
-				"genericagent.t",
-				"znuny_dev/scripts/test/GenericAgent.t"
-			],
-			[
-				"generic_ag",
-				"Znuny-PackageGenerator/generators/generic_agent/config.js"
-			],
-			[
-				"cha",
-				"CHANGES.md"
-			],
-			[
-				"Kernel/System/Console/Command/Dev/Tools/BundledModulesUpdate.pm",
-				"Kernel/System/Console/Command/Dev/Tools/BundledModulesUpdate.pm"
-			],
-			[
-				"cus",
-				"znuny_65/Kernel/System/CustomerCompany.pm"
-			],
-			[
-				"AdminCustomerCompanyService",
-				"Znuny4OTRS-CustomerCompanyService/Kernel/Modules/AdminCustomerCompanyService.pm"
-			],
-			[
-				"AdminCustomerUserService",
-				"znuny_65/Kernel/Modules/AdminCustomerUserService.pm"
-			],
-			[
-				"AdminCustomerUserService.tt",
-				"znuny_65/Kernel/Output/HTML/Templates/Standard/AdminCustomerUserService.tt"
-			],
-			[
-				"custocom",
-				"znuny_65/Kernel/System/CustomerCompany.pm"
-			],
-			[
-				"tor-sublime-package/generators/app/index.",
-				"generator-sublime-package/generators/app/index.js"
-			],
-			[
-				"ticket",
-				"znuny_70/Kernel/System/Ticket.pm"
-			],
-			[
-				"ticketget",
-				"znuny_70/Kernel/GenericInterface/Operation/Ticket/TicketGet.pm"
-			],
-			[
-				"ticketli",
-				"znuny_70/Kernel/System/Stats/Dynamic/TicketList.pm"
-			],
-			[
-				"WorkingTimeTillSolution",
-				"Znuny4OTRS-AdvancedStats/Kernel/System/Stats/ZnunyAdvancedStats/Modules/WorkingTimeTillSolution.pm"
-			],
-			[
-				"TicketCreateTimeOlderThan",
-				"Znuny4OTRS-AdvancedStats/Kernel/System/Stats/ZnunyAdvancedStats/Filter/TicketCreateTimeOlderThan.pm"
-			],
-			[
-				"gitattributes",
-				"dennykorsukewitz.github.io/.gitattributes"
-			],
-			[
-				"package_control_channel",
-				"package_control_channel/package_control_channel.sublime-project"
-			],
-			[
-				"link",
-				"znuny_70/Kernel/System/LinkObject.pm"
-			],
-			[
-				"ITSMConfigItem",
-				"ITSMConfigurationManagement/Kernel/System/ITSMConfigItem.pm"
-			],
-			[
-				"lay",
-				"znuny_70/Kernel/Output/HTML/Layout.pm"
-			],
-			[
-				"generic",
-				"znuny_70/Kernel/Output/HTML/TicketMenu/Generic.pm"
-			],
-			[
-				"AgentDashboardCommon",
-				"znuny_70/Kernel/Modules/AgentDashboardCommon.pm"
-			],
-			[
-				"AgentCustomerUserInformationCenter",
-				"znuny_70/Kernel/Modules/AgentCustomerUserInformationCenter.pm"
-			],
-			[
-				"AgentDashboardITSMConfigItemGeneric",
-				"ITSMConfigurationManagement/Kernel/Output/HTML/Templates/Standard/AgentDashboardITSMConfigItemGeneric.tt"
-			],
-			[
-				"ITSMConfigItemGeneric",
-				"Kernel/Output/HTML/Dashboard/ITSMConfigItemGeneric.pm"
-			],
-			[
-				"/LayoutCustomer.pm",
-				"Kernel/Output/HTML/ITSMConfigItem/LayoutCustomer.pm"
-			],
-			[
-				"AdminZnunyDynamicFieldGroupsRouting",
-				"Kernel/Modules/AdminZnunyDynamicFieldGroupsRouting.pm"
-			],
-			[
-				"TicketEscalationIndex",
-				"znuny_70/Kernel/System/Ticket/Event/TicketEscalationIndex.pm"
-			],
-			[
-				"defau",
-				"znuny_70/Kernel/Config/Defaults.pm"
-			],
-			[
-				"customerus",
-				"znuny_70/Kernel/System/CustomerUser.pm"
-			],
-			[
-				"Kernel/Output/HTML/ITSMConfigItem/LayoutCustomer.pm",
-				"Kernel/Output/HTML/ITSMConfigItem/LayoutCustomer.pm"
-			],
-			[
-				"AgentITSMConfigItemCustomerCIs",
-				"Kernel/Output/HTML/FilterElementPost/AgentITSMConfigItemCustomerCIs.pm"
-			],
-			[
-				"ITSM.Agent.ConfigItem.CustomerCIsWidget",
-				"var/httpd/htdocs/js/ITSM.Agent.ConfigItem.CustomerCIsWidget.js"
-			],
-			[
-				"AgentITSMConfigItemCustomerCIsWidget",
-				"Kernel/Modules/AgentITSMConfigItemCustomerCIsWidget.pm"
-			],
-			[
-				"ITSMConfigItemCustomerCIs",
-				"Kernel/System/ITSMConfigItemCustomerCIs.pm"
-			],
-			[
-				"backEmail",
-				"znuny_65/Kernel/System/Ticket/Article/Backend/Email.pm"
-			],
-			[
-				"helper.",
-				"znuny_65/Kernel/System/UnitTest/Helper.pm"
-			],
-			[
-				"core.color.css",
-				"znuny_dev/var/httpd/htdocs/skins/Agent/default/css/Core.Color.css"
-			],
-			[
-				"unit",
-				"znuny_60/Kernel/System/UnitTest.pm"
-			],
-			[
-				"scripts/test/Selenium/Agent/ZnunyCISearch",
-				"Znuny4OTRS-CISearch/scripts/test/Selenium/Agent/ZnunyCISearch.t"
-			],
-			[
-				"Core.Agent.Header",
-				"znuny_70/var/httpd/htdocs/js/Core.Agent.Header.js"
-			],
-			[
-				"Core.Config",
-				"znuny_65/var/httpd/htdocs/js/Core.Config.js"
-			],
-			[
-				"ToolBar/ge",
-				"znuny_65/Kernel/Output/HTML/ToolBar/Generic.pm"
-			],
-			[
-				"Core.Config.",
-				"znuny_65/var/httpd/htdocs/js/Core.Config.js"
-			],
-			[
-				"core.input",
-				"znuny_65/var/httpd/htdocs/js/Core.UI.InputFields.js"
-			],
-			[
-				"TicketSearchProfile",
-				"znuny_70/Kernel/Output/HTML/ToolBar/TicketSearchProfile.pm"
-			],
-			[
-				"AgentITSMChangeZoom",
-				"ITSMChangeManagement/Kernel/Modules/AgentITSMChangeZoom.pm"
-			],
-			[
-				"LinkObject",
-				"znuny_dev/Kernel/System/LinkObject.pm"
-			],
-			[
-				"AgentITSMConfigItemZoom",
-				"ITSMConfigurationManagement/Kernel/Modules/AgentITSMConfigItemZoom.pm"
-			],
-			[
-				"hirdparty/d3-3.5.7/d3.js",
-				"znuny_dev/var/httpd/htdocs/js/thirdparty/d3-3.5.7/d3.js"
-			],
-			[
-				"vars",
-				"znuny_dev/var/httpd/htdocs/skins/Agent/default/css/Core.Vars.css"
-			],
-			[
-				"color.",
-				"znuny_dev/var/httpd/htdocs/skins/Agent/default/css/Core.Color.css"
-			],
-			[
-				"core.color",
-				"var/httpd/htdocs/skins/Agent/default/css/Core.Color.css"
-			],
-			[
-				"relea",
-				"znuny_70/RELEASE"
-			],
-			[
-				"link.js",
-				"var/httpd/htdocs/js/Core.Agent.LinkObject.js"
-			],
-			[
-				"AdminOAuth2TokenManagement",
-				"znuny_70/Kernel/Modules/AdminOAuth2TokenManagement.pm"
-			],
-			[
-				"agentickse",
-				"znuny_70/Kernel/Modules/AgentTicketSearch.pm"
-			],
-			[
-				"core.agehea",
-				"znuny_70/var/httpd/htdocs/js/Core.Agent.Header.js"
-			],
-			[
-				"Core.App",
-				"var/httpd/htdocs/js/Core.App.js"
-			],
-			[
-				"mode-",
-				"jekyll-theme-chirpy/_includes/mode-toggle.html"
-			],
-			[
-				"core.",
-				"znuny_70/var/httpd/htdocs/js/Core.Activity.js"
-			],
-			[
-				"repositories_tab.sh",
-				".github/workflows/pages/repositories_tab.sh"
-			],
-			[
-				"Kernel/Output/HTML/Layout.pm",
-				"Kernel/Output/HTML/Layout.pm"
-			],
-			[
-				"scripts/test/Selenium/Agent/Ajax/ErrorHandling",
-				"scripts/test/Selenium/Agent/Ajax/ErrorHandling.t"
-			],
-			[
-				"con",
-				"znuny_65/Kernel/Config.pm"
-			],
-			[
-				"conf",
-				"znuny_dev/Kernel/Config.pm"
-			],
-			[
-				"var/httpd/htdocs/skins/Agent/default/css/Core.Default.css",
-				"var/httpd/htdocs/skins/Agent/default/css/Core.Default.css"
-			],
-			[
-				"Setup",
-				"module-tools/lib/Console/Command/TestSystem/Instance/Setup.pm"
-			],
-			[
-				"coreinut",
-				"znuny_dev/var/httpd/htdocs/js/Core.UI.InputFields.js"
-			],
-			[
-				"scripts/test/Selenium/Agent/AgentTicketEmailResend",
-				"znuny_dev/scripts/test/Selenium/Agent/AgentTicketEmailResend.t"
-			],
-			[
-				"scripts/test/Selenium/Output/ToolBar/TicketSearchFulltext",
-				"znuny_dev/scripts/test/Selenium/Output/ToolBar/TicketSearchFulltext.t"
-			],
-			[
-				"scripts/test/Selenium/Agent/AgentValidateCKEditor",
-				"znuny_dev/scripts/test/Selenium/Agent/AgentValidateCKEditor.t"
-			],
-			[
-				"scripts/test/Selenium/Agent/Responsive/Popups",
-				"znuny_dev/scripts/test/Selenium/Agent/Responsive/Popups.t"
-			],
-			[
-				"",
-				"znuny_dev/scripts/test/Selenium/Agent/AgentTicketActionCommon/AgentTicketNote.t"
-			],
-			[
-				"cTicketProcess",
-				"znuny_dev/Kernel/Modules/CustomerTicketProcess.pm"
-			],
-			[
-				"customerproces.js",
-				"znuny_dev/var/httpd/htdocs/js/Core.Customer.TicketProcess.js"
-			],
-			[
-				"scripts/test/Selenium/Agent/AgentTicketActionCommon/AgentTicketNote",
-				"znuny_dev/scripts/test/Selenium/Agent/AgentTicketActionCommon/AgentTicketNote.t"
-			],
-			[
-				"Core.UI.Dialog",
-				"znuny_60/var/httpd/htdocs/js/Core.UI.Dialog.js"
-			],
-			[
-				"core.uiin",
-				"znuny_dev/var/httpd/htdocs/js/Core.UI.InputFields.js"
-			],
-			[
-				"admintyp",
-				"znuny_dev/scripts/test/Selenium/Agent/Admin/AdminType.t"
-			],
-			[
-				"ci.yml",
-				"znuny_dev/.github/workflows/ci.yaml"
-			],
-			[
-				"scripts/test/Selenium/Base/",
-				"scripts/test/Selenium/Base/Element.t"
-			],
-			[
-				"sele.t",
-				"scripts/test/Selenium/Base/Selenium.t"
-			],
-			[
-				"post.",
-				"jekyll-theme-chirpy/_layouts/post.html"
-			],
-			[
-				"time",
-				"_static/_posts/2023-08-30-Znuny-Timeline.md"
-			],
-			[
-				"AgentStatisticsOverview.TT",
-				"Kernel/Output/HTML/Templates/Standard/AgentStatisticsOverview.tt"
-			],
-			[
-				"AgentStatistics",
-				"Kernel/Modules/AgentStatistics.pm"
-			],
-			[
-				"scripts/test/UniBonnCustomizations/System/AutoResponse",
-				"UniBonn-Customizations/scripts/test/UniBonnCustomizations/System/AutoResponse.t"
-			],
-			[
-				"Kernel/System/Stats/Dynamic/TicketAccountedTimeEscalation.pm",
-				"ETHZ-AdvancedEscalations/Kernel/System/Stats/Dynamic/TicketAccountedTimeEscalation.pm"
-			],
-			[
-				"Kernel/System/Stats/Dynamic/TicketSolutionResponseTime.pm",
-				"znuny_70/Kernel/System/Stats/Dynamic/TicketSolutionResponseTime.pm"
-			],
-			[
-				"Kernel/System/Stats/Dynamic/TicketList",
-				"znuny_70/Kernel/System/Stats/Dynamic/TicketList.pm"
-			],
-			[
-				"Kernel/System/Stats/Dynamic/Ticket.pm",
-				"znuny_70/Kernel/System/Stats/Dynamic/Ticket.pm"
-			],
-			[
-				"TicketAccountedTime",
-				"znuny_70/Kernel/System/Stats/Dynamic/TicketAccountedTime.pm"
-			],
-			[
-				"AdminEscalationType",
-				"znuny_70/Kernel/Modules/AdminEscalationType.pm"
-			],
-			[
-				"template",
-				"znuny_70/Kernel/System/TemplateGenerator.pm"
-			],
-			[
-				"EscalationIndexRebuild",
-				"znuny_70/scripts/test/Console/Command/Maint/Ticket/EscalationIndexRebuild.t"
-			],
-			[
-				"AgentTicketEscalation",
-				"znuny_70/Kernel/Output/HTML/Templates/Standard/AgentTicketEscalation.tt"
-			],
-			[
-				"AgentEscalationsWidget",
-				"znuny_70/Kernel/Output/HTML/Templates/Standard/AgentEscalationsWidget.tt"
-			],
-			[
-				"adminqu.tt",
-				"znuny_70/Kernel/Output/HTML/Templates/Standard/AdminQueue.tt"
-			],
-			[
-				"adminqu",
-				"znuny_70/Kernel/Modules/AdminQueue.pm"
-			],
-			[
-				"Core.Default.css",
-				"znuny_70/var/httpd/htdocs/skins/Agent/default/css/Core.Default.css"
-			],
-			[
-				"core.dea",
-				"znuny_60/var/httpd/htdocs/skins/Agent/default/css/Core.Default.css"
-			],
-			[
-				"core.css",
-				"znuny_70/var/httpd/htdocs/skins/Agent/default/css/Core.Animations.css"
-			],
-			[
-				"bac",
-				"znuny_70/Kernel/System/DynamicField/Backend.pm"
-			],
-			[
-				"scripts/test/DynamicField/PrimarySecondary/EditFieldRender",
-				"Znuny-PrimarySecondary/scripts/test/DynamicField/PrimarySecondary/EditFieldRender.t"
-			],
-			[
-				"adminq.tt",
-				"znuny_70/Kernel/Output/HTML/Templates/Standard/AdminQueue.tt"
-			],
-			[
-				"AgentTicketPrimarySecondary",
-				"Znuny-PrimarySecondary/Kernel/Modules/AgentTicketPrimarySecondary.pm"
-			],
-			[
-				"AgentTicketActionCommon",
-				"znuny_70/Kernel/Modules/AgentTicketActionCommon.pm"
-			],
-			[
-				"AgentTicketActionCommon.tt",
-				"znuny_70/Kernel/Output/HTML/Templates/Standard/AgentTicketActionCommon.tt"
-			],
-			[
-				"AdminDynamicFieldScreenConfiguration.tt",
-				"znuny_70/Kernel/Output/HTML/Templates/Standard/AdminDynamicFieldScreenConfiguration.tt"
-			],
-			[
-				"adminq",
-				"znuny_70/Kernel/Modules/AdminQueue.pm"
-			]
-		],
-		"width": 0.0
-	},
-	"select_project":
-	{
-		"height": 501.0,
-		"last_filter": "",
-		"selected_items":
-		[
-			[
-				"",
-				"~/workspace/dennykorsukewitz/sublime-test/DELETEME.sublime-workspace"
-			]
-		],
-		"width": 380.0
-	},
-	"select_symbol":
-	{
-		"height": 259.0,
-		"last_filter": "",
-		"selected_items":
-		[
-		],
-		"width": 552.0
-	},
-	"selected_group": 0,
-	"settings":
-	{
-	},
-	"show_minimap": true,
-	"show_open_files": false,
-	"show_tabs": true,
-	"side_bar_visible": true,
-	"side_bar_width": 260.0,
-	"status_bar_visible": true,
-	"template_settings":
-	{
-	}
-}
diff --git a/package.json b/package.json
index 58dde8f..d8e804c 100644
--- a/package.json
+++ b/package.json
@@ -32,8 +32,8 @@
   ],
   "scripts": {
     "lint": "eslint .",
-    "lint-fix": "eslint . --fix",
-    "ejslint": "ejslint ./generators/app/",
+    "lint-fix": "eslint . --fix && ejslint generators/",
+    "ejslint": "ejslint generators/",
     "test": "jest --colors",
     "coverage": "jest --coverage --colors --verbose --forceExit --no-cache"
   },