{"data":{"format":"sidebud-widget-pack","formatVersion":2,"exportedAt":"2026-09-26T11:44:56.613Z","manifest":{"id":"app.sidebud.codex-sessions","mcp":{"env":{"CODEX_HOME":"{{env.CODEX_HOME|default:}}","CODEX_COMMAND":"{{env.CODEX_COMMAND|default:}}","CODEX_SESSIONS_MODEL":"{{setting.model}}","CODEX_SESSIONS_FOLDERS":"{{setting.allowedFolders}}"},"args":["server/index.mjs"],"command":"node","transport":"stdio"},"data":[{"id":"sessions","tool":"list_sessions","arguments":{"limit":20},"refreshSeconds":20},{"id":"pending","tool":"list_pending","refreshSeconds":20}],"logo":{"kind":"file","path":"logo.png","source":"https://learn.chatgpt.com/docs/app"},"name":"Codex sessions","tile":{"size":"large"},"badge":{"text":"{{pending/count}}","tone":"warning"},"setup":{"steps":["Install Codex 0.157 or later and sign in (codex --version, then codex login).","Nothing else is needed to see and message sessions. To let the execution agent start new sessions, set Allowed folders to the project folders it may use.","Optionally set Model; otherwise Codex uses the model and approval settings in your Codex config."],"detect":{"anyPath":["~/.codex","{{env.CODEX_HOME}}"]},"prerequisites":[{"name":"Codex CLI 0.157 or later","command":"codex"},{"name":"Node.js 22 or later","command":"node"}]},"skill":{"path":"SKILL.md"},"author":{"name":"Sidebud"},"blocks":[{"type":"stats","items":[{"tone":"info","label":"Running","value":"{{sessions/running|default:0}}"},{"tone":"warning","label":"Needs you","value":"{{pending/count|default:0}}"},{"tone":"neutral","label":"Folders","value":"{{sessions/folders|count}}"}]},{"item":{"key":"{{item/id}}","time":"{{item/updatedAt}}","title":"{{item/title|truncate:60}}","status":"{{item/activity}}","subtitle":"{{item/folderName}} · {{item/app}}","statusTones":{"running":"info","needs you":"warning"}},"type":"list","items":"{{sessions/sessions|sort:-state=needs_you,-state=running,-updatedAt}}","limit":8,"title":"Sessions","emptyText":"No Codex sessions yet"},{"item":{"key":"{{item/session_id}}","time":"{{item/at}}","title":"{{item/summary|truncate:80}}","status":"needs you","subtitle":"{{item/title|truncate:40}}","statusTones":{"needs you":"warning"}},"type":"list","items":"{{pending/pending|sort:at}}","limit":6,"title":"Waiting on you","emptyText":"Nothing is waiting on you"},{"item":{"time":"{{item/updatedAt}}","title":"{{item/name}}","status":"{{item/activity}}","subtitle":"{{item/sessions}} recent · {{item/folder|truncate:50}}","statusTones":{"needs you":"warning"}},"type":"list","items":"{{sessions/folders|sort:-needsYou,-running,-updatedAt}}","limit":8,"title":"Folders","emptyText":"No folders yet"}],"detail":{"tool":"read_session","message":{"at":"{{item/at}}","role":"{{item/role}}","text":"{{item/text}}"},"messages":"{{detail/messages}}","arguments":{"limit":12,"session_id":"{{item/session_id}}"}},"glance":{"stats":[{"tone":"info","label":"Running","value":"{{sessions/running|default:0}}"},{"tone":"warning","label":"Needs you","value":"{{pending/count|default:0}}"}]},"notify":[{"id":"approvals","key":"{{item/session_id}}@{{item/at}}","items":"{{pending/pending}}","rules":[{"new":true,"text":"Codex needs your approval in “{{item/title}}”: {{item/summary|truncate:100}}.","priority":"needs_you"}],"category":"agents"},{"id":"turns","key":"{{item/id}}@{{item/turnAt}}","items":"{{sessions/sessions}}","rules":[{"text":"Codex finished “{{item/title}}” in {{item/folderName}}.","state":"finished","priority":"finished","withLatest":true}],"state":"{{item/state}}","category":"agents"}],"license":"MIT","listing":{"account":"Codex on this computer, signed in","category":"agents","homepage":"https://learn.chatgpt.com/docs/app-server","connectsTo":"Codex on this computer, through the server in this pack (codex app-server)"},"preview":{"at":"2026-09-25T09:00:00.000Z","data":{"pending":{"count":1,"pending":[{"at":"2026-09-25T08:52:00.000Z","id":"a1","kind":"command","title":"Clean up old build scripts","command":"rm -rf scripts/legacy","summary":"Run rm -rf scripts/legacy","folderName":"photo-app","session_id":"0199a1b2-0000-7000-8000-000000000002"}]},"sessions":{"count":4,"folders":[{"name":"photo-app","folder":"/Users/sam/code/photo-app","running":1,"activity":"needs you","needsYou":1,"sessions":2,"updatedAt":"2026-09-25T08:58:00.000Z"},{"name":"site","folder":"/Users/sam/code/site","running":0,"activity":"","needsYou":0,"sessions":2,"updatedAt":"2026-09-25T08:20:00.000Z"}],"pending":1,"running":1,"needsYou":1,"sessions":[{"id":"0199a1b2-0000-7000-8000-000000000001","app":"Codex CLI","state":"running","title":"Add retry to the upload client","folder":"/Users/sam/code/photo-app","turnAt":"2026-09-25T08:57:00.000Z","activity":"running","updatedAt":"2026-09-25T08:58:00.000Z","folderName":"photo-app","session_id":"0199a1b2-0000-7000-8000-000000000001"},{"id":"0199a1b2-0000-7000-8000-000000000002","app":"Sidebud","state":"needs_you","title":"Clean up old build scripts","folder":"/Users/sam/code/photo-app","turnAt":"2026-09-25T08:50:00.000Z","activity":"needs you","updatedAt":"2026-09-25T08:52:00.000Z","folderName":"photo-app","session_id":"0199a1b2-0000-7000-8000-000000000002"},{"id":"0199a1b2-0000-7000-8000-000000000003","app":"Codex app","state":"finished","title":"Why is the dark theme flickering?","folder":"/Users/sam/code/site","turnAt":"2026-09-25T08:20:00.000Z","activity":"","updatedAt":"2026-09-25T08:20:00.000Z","folderName":"site","session_id":"0199a1b2-0000-7000-8000-000000000003"},{"id":"0199a1b2-0000-7000-8000-000000000004","app":"IDE","state":"finished","title":"Write tests for the date parser","folder":"/Users/sam/code/site","turnAt":"2026-09-25T06:40:00.000Z","activity":"","updatedAt":"2026-09-25T06:40:00.000Z","folderName":"site","session_id":"0199a1b2-0000-7000-8000-000000000004"}]}}},"version":"1.0.1","controls":[{"id":"status","kind":"prompt","label":"What's Codex doing?","prompt":"What are my Codex sessions doing? Tell me what's running and what finished recently.","default":true},{"id":"waiting","kind":"prompt","label":"Anything waiting on me?","prompt":"Is Codex waiting on me for anything, like an approval?","default":true}],"settings":[{"id":"allowedFolders","type":"text","label":"Allowed folders","default":"","description":"Absolute folders where new Codex sessions may be started, separated by commas; their subfolders are allowed too. Empty (the default) turns starting sessions off. Reading and messaging existing sessions work either way."},{"id":"model","type":"text","label":"Model","default":"","description":"The model for turns this pack starts, such as one `codex` lists under /model. Empty uses the model in your Codex config."}],"subtitle":"{{sessions/count|default:0}} recent sessions · {{sessions/running|default:0}} running · {{pending/count|default:0}} waiting on you","description":"The Codex sessions you started in the Codex CLI, an IDE, or the Codex app: what each is doing, what it changed, and what is waiting on you. The execution agent can read a session, message it, stop a turn it started, answer its approvals, and start new sessions in folders you allow.","permissions":{"reach":["computer"],"tools":[{"name":"list_sessions","access":"read","description":"Recent Codex sessions by folder, and which are running or waiting on you"},{"name":"read_session","access":"read","description":"A session's latest messages and turn"},{"name":"get_diff","access":"read","description":"The files a session's latest turn changed"},{"name":"list_pending","access":"read","description":"Approvals waiting on you, for turns this pack started"},{"name":"send_message","access":"write","description":"Send a message to a session"},{"name":"start_session","access":"write","description":"Start a session in an allowed folder"},{"name":"stop_session","access":"write","description":"Stop a turn this pack started"},{"name":"respond_pending","access":"write","description":"Answer an approval"}]},"schemaVersion":3,"refreshSeconds":20,"contentHash":"sha256:a9232065de91e55838ba0a458deb557cdf2def2087a40534b50f7b896bd4d511"},"files":{"logo.png":"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","server/index.mjs":"Ly8gQ29kZXggc2Vzc2lvbnMgTUNQIHNlcnZlciBmb3IgdGhpcyBwYWNrOiB0aGUgQ29kZXggc2Vzc2lvbnMgdGhlIHVzZXIKLy8gc3RhcnRlZCBlbHNld2hlcmUgKENMSSwgSURFIGV4dGVuc2lvbiwgdGhlIENvZGV4IGFwcCksIHJlYWQgYW5kIHN0ZWVyZWQKLy8gdGhyb3VnaCBgY29kZXggYXBwLXNlcnZlcmAsIENvZGV4J3MgSlNPTi1SUEMgaW50ZXJmYWNlIG92ZXIgc3RkaW8uIE9uZQovLyBhcHAtc2VydmVyIGNoaWxkIHN0YXlzIHVwIHdoaWxlIHRoaXMgc2VydmVyIHJ1bnMsIHJlc3RhcnRzIG9uIHRoZSBuZXh0IGNhbGwKLy8gaWYgaXQgZGllcywgYW5kIGlzIGtpbGxlZCB3aGVuIHRoaXMgc2VydmVyIGV4aXRzLiBTZXNzaW9uIGZpbGVzIHVuZGVyCi8vIENPREVYX0hPTUUgYXJlIHJlYWQgb25seSB0byB0ZWxsIHdoZXRoZXIgYSB0dXJuIGlzIHN0aWxsIHJ1bm5pbmcsIGJlY2F1c2UKLy8gYXBwLXNlcnZlciByZXBvcnRzIHNlc3Npb25zIG9wZW4gaW4gb3RoZXIgcHJvZ3JhbXMgYXMgbm90IGxvYWRlZC4KLy8KLy8gQ29kZXggYWxsb3dzIG9uZSB3cml0ZXIgcGVyIHNlc3Npb246IGEgc2Vzc2lvbiBvcGVuIGluIGFub3RoZXIgQ29kZXgKLy8gcHJvZ3JhbSAoZXZlbiBpZGxlKSBjYW4gYmUgcmVhZCBidXQgbm90IG1lc3NhZ2VkIG9yIHN0b3BwZWQgZnJvbSBoZXJlLCBhbmQKLy8gYXBwLXNlcnZlciBzZW5kcyBhcHByb3ZhbCByZXF1ZXN0cyBvbmx5IHRvIHRoZSBwcm9ncmFtIHRoYXQgc3RhcnRlZCB0aGUKLy8gdHVybi4gU28gYXBwcm92YWxzIHJlYWNoIHRoaXMgcGFjayBmb3IgdHVybnMgaXQgc3RhcnRlZCwgbmV2ZXIgZm9yIG90aGVycy4KLy8KLy8gQ09ERVhfQ09NTUFORCBvdmVycmlkZXMgdGhlIGNvZGV4IGNvbW1hbmQgKGRlZmF1bHQgYGNvZGV4YCBvbiB0aGUgUEFUSCk7Ci8vIENPREVYX1NFU1NJT05TX0ZPTERFUlMgbGlzdHMgdGhlIGZvbGRlcnMgc3RhcnRfc2Vzc2lvbiBtYXkgdXNlLCBhbmQKLy8gQ09ERVhfU0VTU0lPTlNfTU9ERUwgb3ZlcnJpZGVzIHRoZSBtb2RlbCBmb3IgdHVybnMgdGhpcyBwYWNrIHN0YXJ0cy4KaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnCmltcG9ydCB7IGNsb3NlU3luYywgZXhpc3RzU3luYywgb3BlblN5bmMsIHJlYWRkaXJTeW5jLCByZWFkU3luYywgcmVhbHBhdGhTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnCmltcG9ydCB7IGJhc2VuYW1lLCBpc0Fic29sdXRlLCBqb2luLCByZWxhdGl2ZSwgc2VwIH0gZnJvbSAnbm9kZTpwYXRoJwppbXBvcnQgeyBjcmVhdGVJbnRlcmZhY2UgfSBmcm9tICdub2RlOnJlYWRsaW5lJwppbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSAnbm9kZTp1cmwnCmltcG9ydCB7IGFyZywgc2VydmUgfSBmcm9tICcuL21jcC5tanMnCgovKiogVGhlIENvZGV4IHJlbGVhc2UgdGhpcyBwYWNrIHdhcyB2ZXJpZmllZCBhZ2FpbnN0OyBvbGRlciBvbmVzIG1heSBsYWNrIHRoZSBhcHAtc2VydmVyIG1ldGhvZHMgaXQgdXNlcy4gKi8KZXhwb3J0IGNvbnN0IE1JTl9DT0RFWCA9ICcwLjE1Ny4wJwpjb25zdCBWRVJTSU9OID0gJzEuMC4wJwpjb25zdCBDTElFTlQgPSB7IG5hbWU6ICdzaWRlYnVkLWNvZGV4LXNlc3Npb25zJywgdGl0bGU6ICdTaWRlYnVkIENvZGV4IHNlc3Npb25zIHBhY2snLCB2ZXJzaW9uOiBWRVJTSU9OIH0KLyoqIFRoZSBvcmlnaW5hdG9yIFNpZGVidWQncyBvd24gQ29kZXggZXhlY3V0b3IgcmVjb3Jkcy4gSXRzIHNlc3Npb25zIGFyZSBTaWRlYnVkIHRhc2tzLCBzbyB0aGV5IGFyZSBsZWZ0IG91dCBoZXJlLiAqLwpjb25zdCBTSURFQlVEX0VYRUNVVE9SID0gJ3JlbW90ZS12b2ljZS1hZ2VudCcKLyoqIEFuIG9wZW4gdHVybiB3aG9zZSBzZXNzaW9uIGZpbGUgaGFzIG5vdCBjaGFuZ2VkIGZvciB0aGlzIGxvbmcgaXMgdHJlYXRlZCBhcyBhYmFuZG9uZWQgKGl0cyBwcm9ncmFtIHdhcyBraWxsZWQpLiAqLwpjb25zdCBTVEFMRV9NUyA9IDIwICogNjBfMDAwCmNvbnN0IHJlYWQgPSB7IHJlYWRPbmx5SGludDogdHJ1ZSwgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZSwgaWRlbXBvdGVudEhpbnQ6IHRydWUgfQpjb25zdCB3b3JrID0geyByZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlLCBpZGVtcG90ZW50SGludDogZmFsc2UgfQpjb25zdCBUSFJFQURfSUQgPSAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQvaQpjb25zdCBBUFBST1ZBTF9JRCA9IC9eYVxkezEsOX0kLwpjb25zdCBERUNJU0lPTlMgPSBbJ2FwcHJvdmUnLCAnYXBwcm92ZV9mb3Jfc2Vzc2lvbicsICdkZWNsaW5lJywgJ2NhbmNlbCddCmNvbnN0IEFQUFJPVkFMX01FVEhPRFMgPSB7ICdpdGVtL2NvbW1hbmRFeGVjdXRpb24vcmVxdWVzdEFwcHJvdmFsJzogJ2NvbW1hbmQnLCAnaXRlbS9maWxlQ2hhbmdlL3JlcXVlc3RBcHByb3ZhbCc6ICdmaWxlX2NoYW5nZScsICdpdGVtL3Blcm1pc3Npb25zL3JlcXVlc3RBcHByb3ZhbCc6ICdwZXJtaXNzaW9ucycgfQpjb25zdCBBUFBTID0geyBjb2RleF9jbGlfcnM6ICdDb2RleCBDTEknLCBjb2RleF9leGVjOiAnY29kZXggZXhlYycsICdDb2RleCBEZXNrdG9wJzogJ0NvZGV4IGFwcCcsIGNvZGV4X3ZzY29kZTogJ0lERScsIFtDTElFTlQubmFtZV06ICdTaWRlYnVkJyB9CmNvbnN0IFNPVVJDRVMgPSB7IGNsaTogJ0NvZGV4IENMSScsIGV4ZWM6ICdjb2RleCBleGVjJywgdnNjb2RlOiAnSURFJywgYXBwU2VydmVyOiAnQXBwIHNlcnZlcicgfQpjb25zdCBpc28gPSAoc2Vjb25kcykgPT4gKHR5cGVvZiBzZWNvbmRzID09PSAnbnVtYmVyJyAmJiBzZWNvbmRzID4gMCA/IG5ldyBEYXRlKHNlY29uZHMgKiAxMDAwKS50b0lTT1N0cmluZygpIDogbnVsbCkKY29uc3QgY2xpcCA9ICh0ZXh0LCBtYXgpID0+ICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgPyAodGV4dC5sZW5ndGggPiBtYXggPyBgJHt0ZXh0LnNsaWNlKDAsIG1heCl94oCmYCA6IHRleHQpIDogbnVsbCkKY29uc3QgZmlyc3RMaW5lID0gKHRleHQpID0+ICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgPyB0ZXh0LnRyaW0oKS5zcGxpdCgnXG4nKVswXSA6ICcnKQpjb25zdCBuZXdlciA9ICh2ZXJzaW9uLCBtaW5pbXVtKSA9PiB7CiAgY29uc3QgW2EsIGJdID0gW3ZlcnNpb24sIG1pbmltdW1dLm1hcCgodmFsdWUpID0+IHZhbHVlLnNwbGl0KCcuJykubWFwKChwYXJ0KSA9PiBwYXJzZUludChwYXJ0LCAxMCkgfHwgMCkpCiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDM7IGluZGV4ICs9IDEpIGlmIChhW2luZGV4XSAhPT0gYltpbmRleF0pIHJldHVybiBhW2luZGV4XSA+IGJbaW5kZXhdCiAgcmV0dXJuIHRydWUKfQoKLyoqCiAqIE9uZSBgY29kZXggYXBwLXNlcnZlcmAgY2hpbGQsIHN0YXJ0ZWQgb24gdGhlIGZpcnN0IHJlcXVlc3QgYW5kIGFnYWluIGFmdGVyCiAqIGl0IGV4aXRzLiBgb25SZXF1ZXN0KG1lc3NhZ2UpYCByZWNlaXZlcyBzZXJ2ZXItdG8tY2xpZW50IHJlcXVlc3RzIChhbnN3ZXIKICogdGhlbSB3aXRoIGByZXNwb25kYCk7IGBvbk5vdGlmaWNhdGlvbihtZXRob2QsIHBhcmFtcylgIHRoZSByZXN0OwogKiBgb25FeGl0KClgIHJ1bnMgd2hlbiB0aGUgY2hpbGQgZ29lcyBhd2F5LgogKi8KZXhwb3J0IGZ1bmN0aW9uIGFwcFNlcnZlcih7IGNvbW1hbmQsIGFyZ3MgPSBbJ2FwcC1zZXJ2ZXInXSwgZW52ID0gcHJvY2Vzcy5lbnYsIG9uUmVxdWVzdCwgb25Ob3RpZmljYXRpb24sIG9uRXhpdCA9ICgpID0+IHt9IH0pIHsKICBsZXQgY2hpbGQgPSBudWxsCiAgbGV0IHJlYWR5ID0gbnVsbAogIGxldCBuZXh0SWQgPSAwCiAgbGV0IHN0ZGVyciA9ICcnCiAgbGV0IHN0YXJ0cyA9IDAKICBjb25zdCBwZW5kaW5nID0gbmV3IE1hcCgpCiAgY29uc3Qgd3JpdGUgPSAobWVzc2FnZSkgPT4gY2hpbGQ/LnN0ZGluLndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHsganNvbnJwYzogJzIuMCcsIC4uLm1lc3NhZ2UgfSl9XG5gKQogIGNvbnN0IHNlbmQgPSAobWV0aG9kLCBwYXJhbXMsIHRpbWVvdXRNcykgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgY29uc3QgaWQgPSArK25leHRJZAogICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgcGVuZGluZy5kZWxldGUoaWQpCiAgICAgIHJlamVjdChuZXcgRXJyb3IoYENvZGV4IGRpZCBub3QgYW5zd2VyICR7bWV0aG9kfSBpbiAke01hdGgucm91bmQodGltZW91dE1zIC8gMTAwMCl9IHNgKSkKICAgIH0sIHRpbWVvdXRNcykKICAgIHBlbmRpbmcuc2V0KGlkLCB7IHJlc29sdmUsIHJlamVjdCwgdGltZXIgfSkKICAgIHdyaXRlKHsgaWQsIG1ldGhvZCwgcGFyYW1zIH0pCiAgfSkKICBjb25zdCBmYWlsQWxsID0gKGVycm9yKSA9PiB7CiAgICBmb3IgKGNvbnN0IFtpZCwgZW50cnldIG9mIHBlbmRpbmcpIHsKICAgICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKQogICAgICBlbnRyeS5yZWplY3QoZXJyb3IpCiAgICAgIHBlbmRpbmcuZGVsZXRlKGlkKQogICAgfQogIH0KICBmdW5jdGlvbiBzdGFydCgpIHsKICAgIHN0YXJ0cyArPSAxCiAgICBzdGRlcnIgPSAnJwogICAgLy8gV2luZG93cyBpbnN0YWxscyBjb2RleCBhcyBhIC5jbWQgc2hpbSwgd2hpY2ggb25seSBhIHNoZWxsIGNhbiBzdGFydDsgdGhlIGFyZ3VtZW50cyBhcmUgZml4ZWQuCiAgICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywgeyBlbnYsIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sIHNoZWxsOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInLCB3aW5kb3dzSGlkZTogdHJ1ZSB9KQogICAgY2hpbGQgPSBwcm9jCiAgICBwcm9jLnN0ZGVyci5vbignZGF0YScsIChjaHVuaykgPT4geyBzdGRlcnIgPSBgJHtzdGRlcnJ9JHtjaHVua31gLnNsaWNlKC0yXzAwMCkgfSkKICAgIHByb2Muc3RkaW4ub24oJ2Vycm9yJywgKCkgPT4ge30pCiAgICBjcmVhdGVJbnRlcmZhY2UoeyBpbnB1dDogcHJvYy5zdGRvdXQgfSkub24oJ2xpbmUnLCAobGluZSkgPT4gewogICAgICBsZXQgbWVzc2FnZQogICAgICB0cnkgewogICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGxpbmUpCiAgICAgIH0gY2F0Y2ggewogICAgICAgIHJldHVybgogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCAmJiBtZXNzYWdlLmlkICE9PSB1bmRlZmluZWQgJiYgbWVzc2FnZS5pZCAhPT0gbnVsbCkgcmV0dXJuIG9uUmVxdWVzdD8uKG1lc3NhZ2UpCiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCkgcmV0dXJuIG9uTm90aWZpY2F0aW9uPy4obWVzc2FnZS5tZXRob2QsIG1lc3NhZ2UucGFyYW1zID8/IHt9KQogICAgICBjb25zdCBlbnRyeSA9IHBlbmRpbmcuZ2V0KG1lc3NhZ2UuaWQpCiAgICAgIGlmICghZW50cnkpIHJldHVybgogICAgICBwZW5kaW5nLmRlbGV0ZShtZXNzYWdlLmlkKQogICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpCiAgICAgIGlmIChtZXNzYWdlLmVycm9yKSBlbnRyeS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UuZXJyb3IubWVzc2FnZSA/PyAnQ29kZXggcmVmdXNlZCB0aGUgcmVxdWVzdCcpKQogICAgICBlbHNlIGVudHJ5LnJlc29sdmUobWVzc2FnZS5yZXN1bHQpCiAgICB9KQogICAgbGV0IGdvbmUgPSBmYWxzZQogICAgY29uc3QgZXhpdGVkID0gKGVycm9yKSA9PiB7CiAgICAgIGlmIChnb25lKSByZXR1cm4KICAgICAgZ29uZSA9IHRydWUKICAgICAgaWYgKGNoaWxkID09PSBwcm9jKSB7CiAgICAgICAgY2hpbGQgPSBudWxsCiAgICAgICAgcmVhZHkgPSBudWxsCiAgICAgIH0KICAgICAgZmFpbEFsbChlcnJvcikKICAgICAgb25FeGl0KCkKICAgIH0KICAgIHByb2Mub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IGV4aXRlZChuZXcgRXJyb3IoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcgPyBgJHtjb21tYW5kfSBpcyBub3QgaW5zdGFsbGVkIG9yIG5vdCBvbiB0aGUgUEFUSC4gSW5zdGFsbCBDb2RleCAoY29kZXggLS12ZXJzaW9uKSBmaXJzdC5gIDogZXJyb3IubWVzc2FnZSkpKQogICAgcHJvYy5vbmNlKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4gZXhpdGVkKG5ldyBFcnJvcihgQ29kZXggYXBwLXNlcnZlciBzdG9wcGVkICgke3NpZ25hbCA/PyBgZXhpdCAke2NvZGV9YH0pJHtzdGRlcnIudHJpbSgpID8gYDogJHtjbGlwKHN0ZGVyci50cmltKCksIDMwMCl9YCA6ICcnfS4gSXQgcmVzdGFydHMgb24gdGhlIG5leHQgY2FsbC5gKSkpCiAgICByZWFkeSA9IChhc3luYyAoKSA9PiB7CiAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBzZW5kKCdpbml0aWFsaXplJywgeyBjbGllbnRJbmZvOiBDTElFTlQsIGNhcGFiaWxpdGllczogbnVsbCB9LCAzMF8wMDApCiAgICAgIHdyaXRlKHsgbWV0aG9kOiAnaW5pdGlhbGl6ZWQnIH0pCiAgICAgIGNvbnN0IHZlcnNpb24gPSAvXC8oXGQrXC5cZCtcLlxkKykvLmV4ZWMoaW5mbz8udXNlckFnZW50ID8/ICcnKT8uWzFdCiAgICAgIGlmICghdmVyc2lvbiB8fCAhbmV3ZXIodmVyc2lvbiwgTUlOX0NPREVYKSkgewogICAgICAgIHByb2Mua2lsbCgpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIHBhY2sgbmVlZHMgQ29kZXggJHtNSU5fQ09ERVh9IG9yIGxhdGVyJHt2ZXJzaW9uID8gYDsgdGhpcyBjb21wdXRlciBoYXMgJHt2ZXJzaW9ufWAgOiAnJ30uIFVwZGF0ZSBDb2RleCBhbmQgdHJ5IGFnYWluLmApCiAgICAgIH0KICAgICAgcmV0dXJuIHsgdmVyc2lvbiwgY29kZXhIb21lOiBpbmZvLmNvZGV4SG9tZSB9CiAgICB9KSgpCiAgICByZWFkeS5jYXRjaCgoKSA9PiB7CiAgICAgIGlmIChjaGlsZCA9PT0gcHJvYykgcHJvYy5raWxsKCkKICAgIH0pCiAgfQogIHJldHVybiB7CiAgICAvKiogU2VuZHMgYSByZXF1ZXN0LCBzdGFydGluZyB0aGUgY2hpbGQgZmlyc3Qgd2hlbiBpdCBpcyBub3QgcnVubmluZy4gKi8KICAgIGFzeW5jIHJlcXVlc3QobWV0aG9kLCBwYXJhbXMsIHRpbWVvdXRNcyA9IDYwXzAwMCkgewogICAgICBpZiAoIWNoaWxkKSBzdGFydCgpCiAgICAgIGF3YWl0IHJlYWR5CiAgICAgIHJldHVybiBzZW5kKG1ldGhvZCwgcGFyYW1zLCB0aW1lb3V0TXMpCiAgICB9LAogICAgLyoqIENvZGV4J3MgdmVyc2lvbiBhbmQgaG9tZSBmb2xkZXIsIHN0YXJ0aW5nIHRoZSBjaGlsZCBpZiBuZWVkZWQuICovCiAgICBhc3luYyBpbmZvKCkgewogICAgICBpZiAoIWNoaWxkKSBzdGFydCgpCiAgICAgIHJldHVybiByZWFkeQogICAgfSwKICAgIHJlc3BvbmQoaWQsIHJlc3VsdCkgewogICAgICB3cml0ZSh7IGlkLCByZXN1bHQgfSkKICAgIH0sCiAgICByZWplY3QoaWQsIG1lc3NhZ2UpIHsKICAgICAgd3JpdGUoeyBpZCwgZXJyb3I6IHsgY29kZTogLTMyNjAxLCBtZXNzYWdlIH0gfSkKICAgIH0sCiAgICBnZXQgcnVubmluZygpIHsKICAgICAgcmV0dXJuIGNoaWxkICE9PSBudWxsCiAgICB9LAogICAgLyoqIEhvdyBtYW55IHRpbWVzIGEgY2hpbGQgd2FzIHN0YXJ0ZWQsIGZvciB0ZXN0cy4gKi8KICAgIGdldCBzdGFydHMoKSB7CiAgICAgIHJldHVybiBzdGFydHMKICAgIH0sCiAgICBjbG9zZSgpIHsKICAgICAgY2hpbGQ/LmtpbGwoKQogICAgfSwKICB9Cn0KCi8qKgogKiBXaGV0aGVyIGEgc2Vzc2lvbidzIGxhdGVzdCB0dXJuIGlzIHN0aWxsIG9wZW4sIGZyb20gdGhlIHRhaWwgb2YgaXRzIHNlc3Npb24KICogZmlsZSAoYHJvbGxvdXQtKi5qc29ubGApOiB0aGUgbGFzdCBvZiB0YXNrX3N0YXJ0ZWQsIHRhc2tfY29tcGxldGUsIGFuZAogKiB0dXJuX2Fib3J0ZWQgd2lucy4gTnVsbCB3aGVuIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgdGhlIHRhaWwgaGFzIG5vbmUuCiAqLwpleHBvcnQgZnVuY3Rpb24gcm9sbG91dFN0YXRlKHBhdGgpIHsKICBpZiAoIXBhdGggfHwgIWV4aXN0c1N5bmMocGF0aCkpIHJldHVybiBudWxsCiAgY29uc3Qgc2l6ZSA9IHN0YXRTeW5jKHBhdGgpLnNpemUKICBjb25zdCBtb2RpZmllZE1zID0gc3RhdFN5bmMocGF0aCkubXRpbWVNcwogIGNvbnN0IGZkID0gb3BlblN5bmMocGF0aCwgJ3InKQogIHRyeSB7CiAgICBmb3IgKGNvbnN0IHdpbmRvdyBvZiBbNjQgKiAxMDI0LCAxMDI0ICogMTAyNF0pIHsKICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oc2l6ZSwgd2luZG93KQogICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKQogICAgICByZWFkU3luYyhmZCwgYnVmZmVyLCAwLCBsZW5ndGgsIHNpemUgLSBsZW5ndGgpCiAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnRvU3RyaW5nKCd1dGY4Jykuc3BsaXQoJ1xuJykKICAgICAgaWYgKGxlbmd0aCA8IHNpemUpIGxpbmVzLnNoaWZ0KCkKICAgICAgZm9yIChsZXQgaW5kZXggPSBsaW5lcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7CiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2luZGV4XQogICAgICAgIGlmICghbGluZS5pbmNsdWRlcygnImV2ZW50X21zZyInKSkgY29udGludWUKICAgICAgICBsZXQgZW50cnkKICAgICAgICB0cnkgewogICAgICAgICAgZW50cnkgPSBKU09OLnBhcnNlKGxpbmUpCiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICBjb250aW51ZQogICAgICAgIH0KICAgICAgICBjb25zdCB0eXBlID0gZW50cnk/LnR5cGUgPT09ICdldmVudF9tc2cnID8gZW50cnkucGF5bG9hZD8udHlwZSA6IG51bGwKICAgICAgICBpZiAodHlwZSA9PT0gJ3Rhc2tfc3RhcnRlZCcgfHwgdHlwZSA9PT0gJ3Rhc2tfY29tcGxldGUnIHx8IHR5cGUgPT09ICd0dXJuX2Fib3J0ZWQnKSByZXR1cm4geyBsYXN0OiB0eXBlLCBhdDogZW50cnkudGltZXN0YW1wID8/IG51bGwsIG1vZGlmaWVkTXMgfQogICAgICB9CiAgICAgIGlmIChsZW5ndGggPT09IHNpemUpIGJyZWFrCiAgICB9CiAgICByZXR1cm4geyBsYXN0OiBudWxsLCBhdDogbnVsbCwgbW9kaWZpZWRNcyB9CiAgfSBmaW5hbGx5IHsKICAgIGNsb3NlU3luYyhmZCkKICB9Cn0KCi8qKiBGaW5kcyBhIHNlc3Npb24gZmlsZSB1bmRlciBDT0RFWF9IT01FIGJ5IGl0cyBpZCwgZm9yIGFwcC1zZXJ2ZXJzIHRoYXQgZG8gbm90IHJlcG9ydCB0aGUgcGF0aC4gKi8KZnVuY3Rpb24gZmluZFJvbGxvdXQoY29kZXhIb21lLCB0aHJlYWQpIHsKICBpZiAoIWNvZGV4SG9tZSB8fCAhdGhyZWFkLmNyZWF0ZWRBdCkgcmV0dXJuIG51bGwKICBjb25zdCBjcmVhdGVkID0gbmV3IERhdGUodGhyZWFkLmNyZWF0ZWRBdCAqIDEwMDApCiAgLy8gQ29kZXggbmFtZXMgdGhlIGRheSdzIGZvbGRlciBpbiBsb2NhbCB0aW1lOyBsb29rIGF0IHRoZSBVVEMgZGF5IHRvby4KICBjb25zdCBkYXlzID0gbmV3IFNldChbCiAgICBbY3JlYXRlZC5nZXRGdWxsWWVhcigpLCBjcmVhdGVkLmdldE1vbnRoKCkgKyAxLCBjcmVhdGVkLmdldERhdGUoKV0sCiAgICBbY3JlYXRlZC5nZXRVVENGdWxsWWVhcigpLCBjcmVhdGVkLmdldFVUQ01vbnRoKCkgKyAxLCBjcmVhdGVkLmdldFVUQ0RhdGUoKV0sCiAgXS5tYXAoKFt5ZWFyLCBtb250aCwgZGF5XSkgPT4gam9pbihTdHJpbmcoeWVhciksIFN0cmluZyhtb250aCkucGFkU3RhcnQoMiwgJzAnKSwgU3RyaW5nKGRheSkucGFkU3RhcnQoMiwgJzAnKSkpKQogIGZvciAoY29uc3QgZGF5IG9mIGRheXMpIHsKICAgIGNvbnN0IGZvbGRlciA9IGpvaW4oY29kZXhIb21lLCAnc2Vzc2lvbnMnLCBkYXkpCiAgICBpZiAoIWV4aXN0c1N5bmMoZm9sZGVyKSkgY29udGludWUKICAgIGNvbnN0IGZpbGUgPSByZWFkZGlyU3luYyhmb2xkZXIpLmZpbmQoKG5hbWUpID0+IG5hbWUuc3RhcnRzV2l0aCgncm9sbG91dC0nKSAmJiBuYW1lLmVuZHNXaXRoKGAke3RocmVhZC5pZH0uanNvbmxgKSkKICAgIGlmIChmaWxlKSByZXR1cm4gam9pbihmb2xkZXIsIGZpbGUpCiAgfQogIHJldHVybiBudWxsCn0KCi8qKiBDb2RleCBydW5zIGNvbW1hbmRzIHRocm91Z2ggdGhlIHVzZXIncyBzaGVsbCAoYC9iaW4venNoIC1sYyAn4oCmJ2ApOyB0aGUgY29tbWFuZCBpbnNpZGUgaXMgd2hhdCB0aGUgdXNlciBuZWVkcyB0byBoZWFyLiAqLwpleHBvcnQgY29uc3QgdW53cmFwU2hlbGwgPSAoY29tbWFuZCkgPT4gKHR5cGVvZiBjb21tYW5kID09PSAnc3RyaW5nJyA/IGNvbW1hbmQubWF0Y2goL14oPzpcUypcLyk/KD86YmF8eik/c2ggLWw/YyAoWyciXSkoW1xzXFNdKilcMSQvKT8uWzJdID8/IGNvbW1hbmQgOiBudWxsKQpjb25zdCB0ZXh0T2YgPSAoaW5wdXQpID0+IChBcnJheS5pc0FycmF5KGlucHV0KSA/IGlucHV0LmZpbHRlcigocGFydCkgPT4gcGFydD8udHlwZSA9PT0gJ3RleHQnKS5tYXAoKHBhcnQpID0+IHBhcnQudGV4dCkuam9pbignXG4nKSA6ICcnKQovKiogRm9sZGVycyBmcm9tIHRoZSBzZXR0aW5nOiBhYnNvbHV0ZSBwYXRocyBzZXBhcmF0ZWQgYnkgY29tbWFzIG9yIG5ldyBsaW5lcy4gKi8KZXhwb3J0IGNvbnN0IHBhcnNlRm9sZGVycyA9ICh2YWx1ZSkgPT4gU3RyaW5nKHZhbHVlID8/ICcnKS5zcGxpdCgvW1xuLF0vKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS50cmltKCkpLmZpbHRlcihCb29sZWFuKQoKLyoqCiAqIFRoZSBzZXJ2ZXIncyB0b29scyBvdmVyIG9uZSBhcHAtc2VydmVyLiBgY29kZXhgIGlzIGFuIGBhcHBTZXJ2ZXJgIChvcgogKiBhbnl0aGluZyB3aXRoIGl0cyBgcmVxdWVzdGAsIGByZXNwb25kYCwgYW5kIGBpbmZvYCksIGFuZCBgc3RhdGVgIHRoZSB0dXJucywKICogYXBwcm92YWxzLCBhbmQgdGl0bGVzIGBjb2RleFNlc3Npb25zYCB0cmFja3MgZnJvbSBpdHMgY2FsbGJhY2tzLiBgZm9sZGVyc2AKICogYXJlIHRoZSBmb2xkZXJzIHN0YXJ0X3Nlc3Npb24gbWF5IHVzZTsgYG1vZGVsYCBvdmVycmlkZXMgdGhlIG1vZGVsIGZvciB0dXJucwogKiB0aGlzIHBhY2sgc3RhcnRzOyBgc3RhdGVPZihwYXRoKWAgcmVhZHMgYSBzZXNzaW9uIGZpbGUgKGByb2xsb3V0U3RhdGVgKS4KICovCmV4cG9ydCBmdW5jdGlvbiBjb2RleFRvb2xzKHsgY29kZXgsIHN0YXRlLCBmb2xkZXJzID0gW10sIG1vZGVsID0gJycsIG5vdyA9ICgpID0+IERhdGUubm93KCksIHN0YXRlT2YgPSByb2xsb3V0U3RhdGUgfSkgewogIGNvbnN0IG1vZGVsT3ZlcnJpZGUgPSBtb2RlbC50cmltKCkgPyB7IG1vZGVsOiBtb2RlbC50cmltKCkgfSA6IHt9CiAgY29uc3QgY29kZXhIb21lID0gYXN5bmMgKCkgPT4gKGF3YWl0IGNvZGV4LmluZm8oKS5jYXRjaCgoKSA9PiBudWxsKSk/LmNvZGV4SG9tZSA/PyBudWxsCgogIGNvbnN0IHJ1bm5pbmcgPSBhc3luYyAodGhyZWFkKSA9PiB7CiAgICAvLyBBIHR1cm4gdGhpcyBwYWNrIGlzIHJ1bm5pbmcgaXMga25vd24gZmlyc3QtaGFuZDsgYWZ0ZXIgaXQsIHRoZSB1c2VyIG1heSBoYXZlIGNvbnRpbnVlZCBlbHNld2hlcmUsIHNvIHJlYWQgdGhlIGZpbGUuCiAgICBjb25zdCBvd24gPSBzdGF0ZS50dXJucy5nZXQodGhyZWFkLmlkKQogICAgaWYgKG93bj8uc3RhdHVzID09PSAnaW5Qcm9ncmVzcycpIHJldHVybiB7IHJ1bm5pbmc6IHRydWUsIGVuZGVkOiBudWxsLCBhdDogb3duLmF0IH0KICAgIGNvbnN0IGZpbGUgPSBzdGF0ZU9mKHRocmVhZC5wYXRoID8/IGZpbmRSb2xsb3V0KGF3YWl0IGNvZGV4SG9tZSgpLCB0aHJlYWQpKQogICAgaWYgKCFmaWxlKSByZXR1cm4geyBydW5uaW5nOiBmYWxzZSwgZW5kZWQ6IG51bGwsIGF0OiBudWxsIH0KICAgIGNvbnN0IHJlY2VudCA9IG5vdygpIC0gZmlsZS5tb2RpZmllZE1zCiAgICAvLyBXaXRob3V0IGEgbGlmZWN5Y2xlIG1hcmtlciBpbiB0aGUgdGFpbCwgYSBmaWxlIHN0aWxsIGJlaW5nIHdyaXR0ZW4gaXMgdGFrZW4gYXMgcnVubmluZy4KICAgIGlmIChmaWxlLmxhc3QgPT09ICd0YXNrX3N0YXJ0ZWQnIHx8IGZpbGUubGFzdCA9PT0gbnVsbCkgewogICAgICBjb25zdCBydW5uaW5nID0gZmlsZS5sYXN0ID09PSAndGFza19zdGFydGVkJyA/IHJlY2VudCA8IFNUQUxFX01TIDogcmVjZW50IDwgMTIwXzAwMAogICAgICByZXR1cm4geyBydW5uaW5nLCBlbmRlZDogcnVubmluZyB8fCBmaWxlLmxhc3QgPT09IG51bGwgPyBudWxsIDogJ3N0b3BwZWQnLCBhdDogZmlsZS5hdCB9CiAgICB9CiAgICByZXR1cm4geyBydW5uaW5nOiBmYWxzZSwgZW5kZWQ6IGZpbGUubGFzdCA9PT0gJ3R1cm5fYWJvcnRlZCcgPyAnc3RvcHBlZCcgOiAnZmluaXNoZWQnLCBhdDogZmlsZS5hdCB9CiAgfQogIC8vIEV2ZXJ5IGFwcC1zZXJ2ZXIgY2xpZW50ICh0aGUgQ29kZXggYXBwLCBJREUgZXh0ZW5zaW9ucywgb3RoZXIgdG9vbHMpIHJlY29yZHMgc291cmNlICJ2c2NvZGUiLCBzbyB0aGUgb3JpZ2luYXRvciBuYW1lcyB0aGUgcHJvZ3JhbSBiZXR0ZXIuCiAgY29uc3QgYXBwT2YgPSAodGhyZWFkKSA9PiB7CiAgICBjb25zdCBzb3VyY2UgPSB0eXBlb2YgdGhyZWFkLnNvdXJjZSA9PT0gJ3N0cmluZycgPyB0aHJlYWQuc291cmNlIDogJycKICAgIGlmIChBUFBTW3RocmVhZC5vcmlnaW5hdG9yXSkgcmV0dXJuIEFQUFNbdGhyZWFkLm9yaWdpbmF0b3JdCiAgICBpZiAoc291cmNlID09PSAnY2xpJyB8fCBzb3VyY2UgPT09ICdleGVjJyB8fCAhdGhyZWFkLm9yaWdpbmF0b3IpIHJldHVybiBTT1VSQ0VTW3NvdXJjZV0gPz8gJ0NvZGV4JwogICAgcmV0dXJuIHRocmVhZC5vcmlnaW5hdG9yLnJlcGxhY2UoL1tfLV0rL2csICcgJykKICB9CiAgY29uc3QgdGl0bGVPZiA9ICh0aHJlYWQpID0+IGNsaXAodGhyZWFkLm5hbWUgfHwgZmlyc3RMaW5lKHRocmVhZC5wcmV2aWV3KSwgODApIHx8ICdVbnRpdGxlZCBzZXNzaW9uJwogIGNvbnN0IHdhaXRpbmdPbiA9ICh0aHJlYWRJZCkgPT4gWy4uLnN0YXRlLmFwcHJvdmFscy52YWx1ZXMoKV0uZmlsdGVyKChhcHByb3ZhbCkgPT4gYXBwcm92YWwudGhyZWFkSWQgPT09IHRocmVhZElkKS5sZW5ndGgKICBjb25zdCBzdW1tYXJpemUgPSBhc3luYyAodGhyZWFkKSA9PiB7CiAgICBjb25zdCB0dXJuID0gYXdhaXQgcnVubmluZyh0aHJlYWQpCiAgICBjb25zdCB3YWl0aW5nID0gd2FpdGluZ09uKHRocmVhZC5pZCkKICAgIGNvbnN0IHN0YXR1cyA9IHdhaXRpbmcgPyAnbmVlZHNfeW91JyA6IHR1cm4ucnVubmluZyA/ICdydW5uaW5nJyA6IHR1cm4uZW5kZWQgPz8gJ2lkbGUnCiAgICBzdGF0ZS50aHJlYWRzLnNldCh0aHJlYWQuaWQsIHsgdGl0bGU6IHRpdGxlT2YodGhyZWFkKSwgZm9sZGVyOiB0aHJlYWQuY3dkID8/IG51bGwgfSkKICAgIHJldHVybiB7CiAgICAgIGlkOiB0aHJlYWQuaWQsCiAgICAgIC8qKiBUaGUgc2FtZSBpZCB1bmRlciB0aGUgbmFtZSByZWFkX3Nlc3Npb24gdGFrZXMsIHNvIHNlc3Npb24gcm93cyBhbmQgYXBwcm92YWwgcm93cyBvcGVuIGFsaWtlLiAqLwogICAgICBzZXNzaW9uX2lkOiB0aHJlYWQuaWQsCiAgICAgIHRpdGxlOiB0aXRsZU9mKHRocmVhZCksCiAgICAgIGZvbGRlcjogdGhyZWFkLmN3ZCA/PyBudWxsLAogICAgICBmb2xkZXJOYW1lOiB0aHJlYWQuY3dkID8gYmFzZW5hbWUodGhyZWFkLmN3ZCkgOiAnTm8gZm9sZGVyJywKICAgICAgYXBwOiBhcHBPZih0aHJlYWQpLAogICAgICBtb2RlbDogdGhyZWFkLm1vZGVsID8/IG51bGwsCiAgICAgIHN0YXRlOiBzdGF0dXMsCiAgICAgIC8qKiBBIHN0YXR1cyBvbmx5IHdoZW4gdGhlcmUgaXMgbmV3czogcnVubmluZyBvciB3YWl0aW5nIG9uIHRoZSB1c2VyLiAqLwogICAgICBhY3Rpdml0eTogc3RhdHVzID09PSAnbmVlZHNfeW91JyA/ICduZWVkcyB5b3UnIDogc3RhdHVzID09PSAncnVubmluZycgPyAncnVubmluZycgOiAnJywKICAgICAgLyoqIFdoZW4gdGhlIGxhdGVzdCB0dXJuIHN0YXJ0ZWQgb3IgZW5kZWQ7IGNoYW5nZXMgb25jZSBwZXIgdHVybiwgc28gYSBmaW5pc2hlZCB0dXJuIGlzIG5vdGljZWQgZXZlbiBiZXR3ZWVuIHJlYWRzLiAqLwogICAgICB0dXJuQXQ6IHR1cm4uYXQgPz8gaXNvKHRocmVhZC51cGRhdGVkQXQpLAogICAgICB1cGRhdGVkQXQ6IGlzbyh0aHJlYWQudXBkYXRlZEF0KSwKICAgICAgY3JlYXRlZEF0OiBpc28odGhyZWFkLmNyZWF0ZWRBdCksCiAgICAgIHByZXZpZXc6IGNsaXAoZmlyc3RMaW5lKHRocmVhZC5wcmV2aWV3KSwgMTYwKSwKICAgIH0KICB9CiAgY29uc3QgdGhyZWFkT2YgPSBhc3luYyAoaWQpID0+IChhd2FpdCBjb2RleC5yZXF1ZXN0KCd0aHJlYWQvcmVhZCcsIHsgdGhyZWFkSWQ6IGlkIH0pKT8udGhyZWFkCiAgLyoqIFRoZSBsYXRlc3QgYGxpbWl0YCB0dXJucywgbmV3ZXN0IGZpcnN0LiBBIHNlc3Npb24gbG9hZGVkIGluIHRoaXMgYXBwLXNlcnZlciBjYW5ub3QgcGFnZSBpdHMgdHVybnMgeWV0LCBzbyBpdCBpcyByZWFkIHdob2xlLiAqLwogIGNvbnN0IHR1cm5zT2YgPSBhc3luYyAoaWQsIGxpbWl0LCBmdWxsKSA9PiB7CiAgICB0cnkgewogICAgICByZXR1cm4gKGF3YWl0IGNvZGV4LnJlcXVlc3QoJ3RocmVhZC90dXJucy9saXN0JywgeyB0aHJlYWRJZDogaWQsIGxpbWl0LCBzb3J0RGlyZWN0aW9uOiAnZGVzYycsIC4uLihmdWxsID8geyBpdGVtc1ZpZXc6ICdmdWxsJyB9IDoge30pIH0pKT8uZGF0YSA/PyBbXQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgaWYgKCEvbm90IHN1cHBvcnRlZC9pLnRlc3QoZXJyb3I/Lm1lc3NhZ2UgPz8gJycpKSB0aHJvdyBlcnJvcgogICAgICByZXR1cm4gKChhd2FpdCBjb2RleC5yZXF1ZXN0KCd0aHJlYWQvcmVhZCcsIHsgdGhyZWFkSWQ6IGlkLCBpbmNsdWRlVHVybnM6IHRydWUgfSkpPy50aHJlYWQ/LnR1cm5zID8/IFtdKS5zbGljZSgtbGltaXQpLnJldmVyc2UoKQogICAgfQogIH0KICBjb25zdCB0aHJlYWRJZCA9IChhcmdzKSA9PiBhcmcuc3RyaW5nKGFyZ3MsICdzZXNzaW9uX2lkJywgeyBwYXR0ZXJuOiBUSFJFQURfSUQgfSkKICBjb25zdCB3cml0ZXJCdXN5ID0gKGVycm9yKSA9PiB7CiAgICBpZiAoL2FjdGl2ZSB3cml0ZXIvaS50ZXN0KGVycm9yPy5tZXNzYWdlID8/ICcnKSkgcmV0dXJuIG5ldyBFcnJvcignVGhpcyBzZXNzaW9uIGlzIG9wZW4gaW4gYW5vdGhlciBDb2RleCBwcm9ncmFtICh0aGUgQ0xJLCBhbiBJREUsIG9yIHRoZSBDb2RleCBhcHApLiBDb2RleCBsZXRzIG9ubHkgb25lIHByb2dyYW0gd29yayBpbiBhIHNlc3Npb24sIHNvIHNlbmQgaXQgdGhlcmUsIG9yIGNsb3NlIHRoYXQgd2luZG93IGFuZCB0cnkgYWdhaW4uJykKICAgIHJldHVybiBlcnJvcgogIH0KICBjb25zdCBpbnB1dCA9ICh0ZXh0KSA9PiBbeyB0eXBlOiAndGV4dCcsIHRleHQsIHRleHRfZWxlbWVudHM6IFtdIH1dCiAgY29uc3Qgc3RhcnRUdXJuID0gYXN5bmMgKGlkLCB0ZXh0KSA9PiB7CiAgICBjb25zdCB7IHR1cm4gfSA9IGF3YWl0IGNvZGV4LnJlcXVlc3QoJ3R1cm4vc3RhcnQnLCB7IHRocmVhZElkOiBpZCwgaW5wdXQ6IGlucHV0KHRleHQpLCAuLi5tb2RlbE92ZXJyaWRlIH0pCiAgICBzdGF0ZS50dXJucy5zZXQoaWQsIHsgdHVybklkOiB0dXJuLmlkLCBzdGF0dXM6ICdpblByb2dyZXNzJywgYXQ6IG5ldyBEYXRlKG5vdygpKS50b0lTT1N0cmluZygpLCBkaWZmOiBudWxsIH0pCiAgICByZXR1cm4gdHVybi5pZAogIH0KICBjb25zdCBhbGxvd2VkID0gKCkgPT4gZm9sZGVycy5mbGF0TWFwKChmb2xkZXIpID0+IHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBpc0Fic29sdXRlKGZvbGRlcikgPyBbcmVhbHBhdGhTeW5jKGZvbGRlcildIDogW10KICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gW10KICAgIH0KICB9KQoKICByZXR1cm4gWwogICAgewogICAgICBuYW1lOiAnbGlzdF9zZXNzaW9ucycsCiAgICAgIGRlc2NyaXB0aW9uOiAiUmVjZW50IENvZGV4IHNlc3Npb25zIHRoZSB1c2VyIHN0YXJ0ZWQgaW4gdGhlIENvZGV4IENMSSwgYW4gSURFLCBvciB0aGUgQ29kZXggYXBwLCBuZXdlc3QgZmlyc3Q6IGlkLCB0aXRsZSwgZm9sZGVyLCBhcHAsIGFuZCBzdGF0ZSAocnVubmluZywgbmVlZHNfeW91LCBmaW5pc2hlZCwgc3RvcHBlZCkuIEFsc28gZWFjaCBmb2xkZXIgd2l0aCBpdHMgY291bnRzLiBTZXNzaW9ucyBTaWRlYnVkJ3Mgb3duIHRhc2tzIHN0YXJ0ZWQgYXJlIGxlZnQgb3V0OyB0aG9zZSBhcmUgU2lkZWJ1ZCB0YXNrcy4iLAogICAgICBpbnB1dFNjaGVtYTogeyB0eXBlOiAnb2JqZWN0JywgcHJvcGVydGllczogeyBsaW1pdDogeyB0eXBlOiAnaW50ZWdlcicsIG1pbmltdW06IDEsIG1heGltdW06IDUwLCBkZWZhdWx0OiAyMCB9LCBmb2xkZXI6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnT25seSBzZXNzaW9ucyBpbiB0aGlzIGFic29sdXRlIGZvbGRlcicgfSwgc2VhcmNoOiB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ1dvcmRzIGluIHRoZSB0aXRsZScgfSB9IH0sCiAgICAgIGFubm90YXRpb25zOiByZWFkLAogICAgICBydW46IGFzeW5jIChhcmdzKSA9PiB7CiAgICAgICAgY29uc3QgbGltaXQgPSBhcmcuaW50ZWdlcihhcmdzLCAnbGltaXQnLCB7IG1pbjogMSwgbWF4OiA1MCwgZmFsbGJhY2s6IDIwIH0pCiAgICAgICAgY29uc3QgZm9sZGVyID0gYXJnLm9wdGlvbmFsU3RyaW5nKGFyZ3MsICdmb2xkZXInLCB7IG1heDogMV8wMDAgfSkKICAgICAgICBjb25zdCBzZWFyY2ggPSBhcmcub3B0aW9uYWxTdHJpbmcoYXJncywgJ3NlYXJjaCcsIHsgbWF4OiAyMDAgfSkKICAgICAgICBjb25zdCBsaXN0ZWQgPSBhd2FpdCBjb2RleC5yZXF1ZXN0KCd0aHJlYWQvbGlzdCcsIHsgbGltaXQ6IE1hdGgubWluKGxpbWl0ICogMiwgMTAwKSwgc29ydEtleTogJ3VwZGF0ZWRfYXQnLCAuLi4oZm9sZGVyID8geyBjd2Q6IGZvbGRlciB9IDoge30pLCAuLi4oc2VhcmNoID8geyBzZWFyY2hUZXJtOiBzZWFyY2ggfSA6IHt9KSB9KQogICAgICAgIGNvbnN0IHRocmVhZHMgPSAobGlzdGVkPy5kYXRhID8/IFtdKS5maWx0ZXIoKHRocmVhZCkgPT4gdGhyZWFkLm9yaWdpbmF0b3IgIT09IFNJREVCVURfRVhFQ1VUT1IgJiYgIXRocmVhZC5wYXJlbnRUaHJlYWRJZCkuc2xpY2UoMCwgbGltaXQpCiAgICAgICAgY29uc3Qgc2Vzc2lvbnMgPSBhd2FpdCBQcm9taXNlLmFsbCh0aHJlYWRzLm1hcChzdW1tYXJpemUpKQogICAgICAgIGNvbnN0IGJ5Rm9sZGVyID0gbmV3IE1hcCgpCiAgICAgICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIHNlc3Npb25zKSB7CiAgICAgICAgICBjb25zdCBlbnRyeSA9IGJ5Rm9sZGVyLmdldChzZXNzaW9uLmZvbGRlcikgPz8geyBmb2xkZXI6IHNlc3Npb24uZm9sZGVyLCBuYW1lOiBzZXNzaW9uLmZvbGRlck5hbWUsIHNlc3Npb25zOiAwLCBydW5uaW5nOiAwLCBuZWVkc1lvdTogMCwgdXBkYXRlZEF0OiBzZXNzaW9uLnVwZGF0ZWRBdCB9CiAgICAgICAgICBlbnRyeS5zZXNzaW9ucyArPSAxCiAgICAgICAgICBpZiAoc2Vzc2lvbi5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSBlbnRyeS5ydW5uaW5nICs9IDEKICAgICAgICAgIGlmIChzZXNzaW9uLnN0YXRlID09PSAnbmVlZHNfeW91JykgZW50cnkubmVlZHNZb3UgKz0gMQogICAgICAgICAgYnlGb2xkZXIuc2V0KHNlc3Npb24uZm9sZGVyLCBlbnRyeSkKICAgICAgICB9CiAgICAgICAgY29uc3QgZm9sZGVycyA9IFsuLi5ieUZvbGRlci52YWx1ZXMoKV0ubWFwKChlbnRyeSkgPT4gKHsgLi4uZW50cnksIGFjdGl2aXR5OiBlbnRyeS5uZWVkc1lvdSA/ICduZWVkcyB5b3UnIDogZW50cnkucnVubmluZyA/IGAke2VudHJ5LnJ1bm5pbmd9IHJ1bm5pbmdgIDogJycgfSkpCiAgICAgICAgcmV0dXJuIHsgY291bnQ6IHNlc3Npb25zLmxlbmd0aCwgcnVubmluZzogc2Vzc2lvbnMuZmlsdGVyKChzZXNzaW9uKSA9PiBzZXNzaW9uLnN0YXRlID09PSAncnVubmluZycpLmxlbmd0aCwgbmVlZHNZb3U6IHNlc3Npb25zLmZpbHRlcigoc2Vzc2lvbikgPT4gc2Vzc2lvbi5zdGF0ZSA9PT0gJ25lZWRzX3lvdScpLmxlbmd0aCwgcGVuZGluZzogc3RhdGUuYXBwcm92YWxzLnNpemUsIHNlc3Npb25zLCBmb2xkZXJzIH0KICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICdyZWFkX3Nlc3Npb24nLAogICAgICBkZXNjcmlwdGlvbjogIlRoZSBsYXRlc3QgbWVzc2FnZXMgb2Ygb25lIENvZGV4IHNlc3Npb24sIG9sZGVzdCBmaXJzdCAodGhlIHVzZXIncyB3b3JkcyBhbmQgQ29kZXgncyByZXBsaWVzLCBlYWNoIHRyaW1tZWQgZm9yIHJlYWRpbmcgYWxvdWQpLCBhbmQgaXRzIGxhdGVzdCB0dXJuOiBzdGF0dXMsIGNvbW1hbmRzIHJ1biwgZmlsZXMgY2hhbmdlZCwgYW5kIGFueSBlcnJvci4iLAogICAgICBpbnB1dFNjaGVtYTogeyB0eXBlOiAnb2JqZWN0JywgcHJvcGVydGllczogeyBzZXNzaW9uX2lkOiB7IHR5cGU6ICdzdHJpbmcnIH0sIGxpbWl0OiB7IHR5cGU6ICdpbnRlZ2VyJywgbWluaW11bTogMSwgbWF4aW11bTogMzAsIGRlZmF1bHQ6IDggfSB9LCByZXF1aXJlZDogWydzZXNzaW9uX2lkJ10gfSwKICAgICAgYW5ub3RhdGlvbnM6IHJlYWQsCiAgICAgIHJ1bjogYXN5bmMgKGFyZ3MpID0+IHsKICAgICAgICBjb25zdCBpZCA9IHRocmVhZElkKGFyZ3MpCiAgICAgICAgY29uc3QgbGltaXQgPSBhcmcuaW50ZWdlcihhcmdzLCAnbGltaXQnLCB7IG1pbjogMSwgbWF4OiAzMCwgZmFsbGJhY2s6IDggfSkKICAgICAgICBjb25zdCB0aHJlYWQgPSBhd2FpdCB0aHJlYWRPZihpZCkKICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgc3VtbWFyaXplKHRocmVhZCkKICAgICAgICBjb25zdCByZWNlbnQgPSBhd2FpdCB0dXJuc09mKGlkLCBNYXRoLm1pbihsaW1pdCwgMTApLCBmYWxzZSkKICAgICAgICBjb25zdCBbbGF0ZXN0XSA9IGF3YWl0IHR1cm5zT2YoaWQsIDEsIHRydWUpCiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSByZWNlbnQKICAgICAgICAgIC5zbGljZSgpCiAgICAgICAgICAucmV2ZXJzZSgpCiAgICAgICAgICAuZmxhdE1hcCgodHVybikgPT4gdHVybi5pdGVtcy5mbGF0TWFwKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd1c2VyTWVzc2FnZScpIHJldHVybiBbeyByb2xlOiAndXNlcicsIHRleHQ6IGNsaXAodGV4dE9mKGl0ZW0uY29udGVudCksIDcwMCksIGF0OiBpc28odHVybi5zdGFydGVkQXQpIH1dCiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdhZ2VudE1lc3NhZ2UnICYmIGl0ZW0udGV4dD8udHJpbSgpKSByZXR1cm4gW3sgcm9sZTogJ2Fzc2lzdGFudCcsIHRleHQ6IGNsaXAoaXRlbS50ZXh0LCA3MDApLCBhdDogaXNvKHR1cm4uY29tcGxldGVkQXQgPz8gdHVybi5zdGFydGVkQXQpIH1dCiAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICAgfSkpCiAgICAgICAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnRleHQpCiAgICAgICAgICAuc2xpY2UoLWxpbWl0KQogICAgICAgIGNvbnN0IGl0ZW1zID0gbGF0ZXN0Py5pdGVtcyA/PyBbXQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBzZXNzaW9uX2lkOiBpZCwKICAgICAgICAgIHRpdGxlOiBzZXNzaW9uLnRpdGxlLAogICAgICAgICAgZm9sZGVyOiBzZXNzaW9uLmZvbGRlciwKICAgICAgICAgIGFwcDogc2Vzc2lvbi5hcHAsCiAgICAgICAgICBzdGF0ZTogc2Vzc2lvbi5zdGF0ZSwKICAgICAgICAgIGxhdGVzdFR1cm46IGxhdGVzdCA/IHsKICAgICAgICAgICAgLy8gQW5vdGhlciBwcm9ncmFtJ3MgcnVubmluZyB0dXJuIHJlYWRzIGFzIGludGVycnVwdGVkIGZyb20gaGVyZSwgc28gdGhlIHNlc3Npb24ncyBzdGF0ZSBkZWNpZGVzLgogICAgICAgICAgICBzdGF0dXM6IGxhdGVzdC5zdGF0dXMgPT09ICdmYWlsZWQnID8gJ2ZhaWxlZCcgOiBzZXNzaW9uLnN0YXRlLAogICAgICAgICAgICBzdGFydGVkQXQ6IGlzbyhsYXRlc3Quc3RhcnRlZEF0KSwKICAgICAgICAgICAgY29tcGxldGVkQXQ6IGlzbyhsYXRlc3QuY29tcGxldGVkQXQpLAogICAgICAgICAgICBjb21tYW5kczogaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09ICdjb21tYW5kRXhlY3V0aW9uJykubGVuZ3RoLAogICAgICAgICAgICBmaWxlc0NoYW5nZWQ6IFsuLi5uZXcgU2V0KGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnZmlsZUNoYW5nZScpLmZsYXRNYXAoKGl0ZW0pID0+IGl0ZW0uY2hhbmdlcy5tYXAoKGNoYW5nZSkgPT4gY2hhbmdlLnBhdGgpKSldLnNsaWNlKDAsIDIwKSwKICAgICAgICAgICAgZXJyb3I6IGNsaXAobGF0ZXN0LmVycm9yPy5tZXNzYWdlLCAzMDApLAogICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICBjb3VudDogbWVzc2FnZXMubGVuZ3RoLAogICAgICAgICAgbWVzc2FnZXMsCiAgICAgICAgfQogICAgICB9LAogICAgfSwKICAgIHsKICAgICAgbmFtZTogJ2dldF9kaWZmJywKICAgICAgZGVzY3JpcHRpb246ICJUaGUgZmlsZSBjaGFuZ2VzIENvZGV4IG1hZGUgaW4gYSBzZXNzaW9uJ3MgbW9zdCByZWNlbnQgdHVybiB0aGF0IGNoYW5nZWQgZmlsZXM6IGVhY2ggZmlsZSB3aXRoIGxpbmVzIGFkZGVkIGFuZCByZW1vdmVkLCBhbmQgdGhlIHVuaWZpZWQgZGlmZiAodHJpbW1lZCkuIiwKICAgICAgaW5wdXRTY2hlbWE6IHsgdHlwZTogJ29iamVjdCcsIHByb3BlcnRpZXM6IHsgc2Vzc2lvbl9pZDogeyB0eXBlOiAnc3RyaW5nJyB9IH0sIHJlcXVpcmVkOiBbJ3Nlc3Npb25faWQnXSB9LAogICAgICBhbm5vdGF0aW9uczogcmVhZCwKICAgICAgcnVuOiBhc3luYyAoYXJncykgPT4gewogICAgICAgIGNvbnN0IGlkID0gdGhyZWFkSWQoYXJncykKICAgICAgICBjb25zdCB0aHJlYWQgPSBhd2FpdCB0aHJlYWRPZihpZCkKICAgICAgICBjb25zdCBsaXZlID0gc3RhdGUudHVybnMuZ2V0KGlkKQogICAgICAgIGNvbnN0IHR1cm5zID0gYXdhaXQgdHVybnNPZihpZCwgNSwgdHJ1ZSkKICAgICAgICBjb25zdCB0dXJuID0gdHVybnMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnZmlsZUNoYW5nZScpKQogICAgICAgIGNvbnN0IGNoYW5nZXMgPSAodHVybj8uaXRlbXMgPz8gW10pLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnZmlsZUNoYW5nZScpLmZsYXRNYXAoKGl0ZW0pID0+IGl0ZW0uY2hhbmdlcykKICAgICAgICBjb25zdCBmaWxlcyA9IGNoYW5nZXMubWFwKChjaGFuZ2UpID0+IHsKICAgICAgICAgIGNvbnN0IGxpbmVzID0gY2hhbmdlLmRpZmYuc3BsaXQoJ1xuJykKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHBhdGg6IHRocmVhZC5jd2QgJiYgaXNBYnNvbHV0ZShjaGFuZ2UucGF0aCkgJiYgIXJlbGF0aXZlKHRocmVhZC5jd2QsIGNoYW5nZS5wYXRoKS5zdGFydHNXaXRoKCcuLicpID8gcmVsYXRpdmUodGhyZWFkLmN3ZCwgY2hhbmdlLnBhdGgpIDogY2hhbmdlLnBhdGgsCiAgICAgICAgICAgIGtpbmQ6IGNoYW5nZS5raW5kPy50eXBlID8/ICd1cGRhdGUnLAogICAgICAgICAgICBhZGRlZDogbGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJysnKSAmJiAhbGluZS5zdGFydHNXaXRoKCcrKysnKSkubGVuZ3RoLAogICAgICAgICAgICByZW1vdmVkOiBsaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aCgnLScpICYmICFsaW5lLnN0YXJ0c1dpdGgoJy0tLScpKS5sZW5ndGgsCiAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAvLyBXaGlsZSB0aGlzIHBhY2sncyB0dXJuIHJ1bnMsIENvZGV4IHN0cmVhbXMgaXRzIHdob2xlIGRpZmYgc28gZmFyLgogICAgICAgIGNvbnN0IGRpZmYgPSBsaXZlPy5zdGF0dXMgPT09ICdpblByb2dyZXNzJyAmJiBsaXZlLmRpZmYgPyBsaXZlLmRpZmYgOiBjaGFuZ2VzLm1hcCgoY2hhbmdlKSA9PiBjaGFuZ2UuZGlmZikuam9pbignXG4nKQogICAgICAgIHJldHVybiB7IHNlc3Npb25faWQ6IGlkLCB0aXRsZTogdGl0bGVPZih0aHJlYWQpLCB0dXJuQXQ6IGlzbyh0dXJuPy5jb21wbGV0ZWRBdCA/PyB0dXJuPy5zdGFydGVkQXQpLCBjb3VudDogZmlsZXMubGVuZ3RoLCBmaWxlcywgZGlmZjogY2xpcChkaWZmLCAyMF8wMDApID8/ICcnLCB0cnVuY2F0ZWQ6IGRpZmYubGVuZ3RoID4gMjBfMDAwIH0KICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICdsaXN0X3BlbmRpbmcnLAogICAgICBkZXNjcmlwdGlvbjogJ0FwcHJvdmFscyBDb2RleCBpcyB3YWl0aW5nIG9uLCBmb3IgdHVybnMgdGhpcyBwYWNrIHN0YXJ0ZWQgKENvZGV4IHNlbmRzIGEgdHVyblwncyBhcHByb3ZhbHMgb25seSB0byB0aGUgcHJvZ3JhbSB0aGF0IHN0YXJ0ZWQgaXQpOiB0aGUgY29tbWFuZCB0byBydW4sIHRoZSBmaWxlcyB0byBjaGFuZ2UsIG9yIHRoZSBwZXJtaXNzaW9ucyBhc2tlZCBmb3IuJywKICAgICAgaW5wdXRTY2hlbWE6IHsgdHlwZTogJ29iamVjdCcsIHByb3BlcnRpZXM6IHt9IH0sCiAgICAgIGFubm90YXRpb25zOiByZWFkLAogICAgICBydW46IGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBwZW5kaW5nID0gWy4uLnN0YXRlLmFwcHJvdmFscy52YWx1ZXMoKV0ubWFwKChhcHByb3ZhbCkgPT4gewogICAgICAgICAgY29uc3QgdGhyZWFkID0gc3RhdGUudGhyZWFkcy5nZXQoYXBwcm92YWwudGhyZWFkSWQpCiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBhcHByb3ZhbC5wYXJhbXMKICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSB1bndyYXBTaGVsbChwYXJhbXMuY29tbWFuZCkKICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBhcHByb3ZhbC5raW5kID09PSAnY29tbWFuZCcgPyBgUnVuICR7Y2xpcChjb21tYW5kLCAyMDApID8/ICdhIGNvbW1hbmQnfWAgOiBhcHByb3ZhbC5raW5kID09PSAnZmlsZV9jaGFuZ2UnID8gYENoYW5nZSBmaWxlcyR7cGFyYW1zLnJlYXNvbiA/IGA6ICR7Y2xpcChwYXJhbXMucmVhc29uLCAxNjApfWAgOiAnJ31gIDogYE1vcmUgYWNjZXNzJHtwYXJhbXMucmVhc29uID8gYDogJHtjbGlwKHBhcmFtcy5yZWFzb24sIDE2MCl9YCA6ICcnfWAKICAgICAgICAgIHJldHVybiB7IGlkOiBhcHByb3ZhbC5pZCwgc2Vzc2lvbl9pZDogYXBwcm92YWwudGhyZWFkSWQsIHRpdGxlOiB0aHJlYWQ/LnRpdGxlID8/ICdDb2RleCBzZXNzaW9uJywgZm9sZGVyTmFtZTogdGhyZWFkPy5mb2xkZXIgPyBiYXNlbmFtZSh0aHJlYWQuZm9sZGVyKSA6IG51bGwsIGtpbmQ6IGFwcHJvdmFsLmtpbmQsIHN1bW1hcnksIGNvbW1hbmQ6IGNsaXAoY29tbWFuZCwgNTAwKSwgY3dkOiBwYXJhbXMuY3dkID8/IG51bGwsIHJlYXNvbjogY2xpcChwYXJhbXMucmVhc29uLCAzMDApLCBhdDogbmV3IERhdGUocGFyYW1zLnN0YXJ0ZWRBdE1zID8/IGFwcHJvdmFsLnJlY2VpdmVkQXQpLnRvSVNPU3RyaW5nKCkgfQogICAgICAgIH0pCiAgICAgICAgcmV0dXJuIHsgY291bnQ6IHBlbmRpbmcubGVuZ3RoLCBwZW5kaW5nIH0KICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICdzZW5kX21lc3NhZ2UnLAogICAgICBkZXNjcmlwdGlvbjogJ1NlbmQgdGhlIHVzZXJcJ3MgbWVzc2FnZSB0byBhIENvZGV4IHNlc3Npb24uIFdoaWxlIHRoaXMgcGFja1wncyBvd24gdHVybiBpcyBydW5uaW5nIGl0IGpvaW5zIHRoYXQgdHVybjsgb3RoZXJ3aXNlIGl0IHN0YXJ0cyBhIG5ldyB0dXJuLCB3aGljaCBDb2RleCBydW5zIHdpdGggdGhlIHVzZXJcJ3MgYXBwcm92YWwgc2V0dGluZ3MuIEZhaWxzIHdoZW4gdGhlIHNlc3Npb24gaXMgb3BlbiBpbiBhbm90aGVyIENvZGV4IHByb2dyYW0uJywKICAgICAgaW5wdXRTY2hlbWE6IHsgdHlwZTogJ29iamVjdCcsIHByb3BlcnRpZXM6IHsgc2Vzc2lvbl9pZDogeyB0eXBlOiAnc3RyaW5nJyB9LCBtZXNzYWdlOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSwgcmVxdWlyZWQ6IFsnc2Vzc2lvbl9pZCcsICdtZXNzYWdlJ10gfSwKICAgICAgYW5ub3RhdGlvbnM6IHdvcmssCiAgICAgIHJ1bjogYXN5bmMgKGFyZ3MpID0+IHsKICAgICAgICBjb25zdCBpZCA9IHRocmVhZElkKGFyZ3MpCiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGFyZy5zdHJpbmcoYXJncywgJ21lc3NhZ2UnLCB7IG1heDogMjBfMDAwIH0pCiAgICAgICAgY29uc3Qgb3duID0gc3RhdGUudHVybnMuZ2V0KGlkKQogICAgICAgIGlmIChvd24/LnN0YXR1cyA9PT0gJ2luUHJvZ3Jlc3MnKSB7CiAgICAgICAgICBhd2FpdCBjb2RleC5yZXF1ZXN0KCd0dXJuL3N0ZWVyJywgeyB0aHJlYWRJZDogaWQsIGV4cGVjdGVkVHVybklkOiBvd24udHVybklkLCBpbnB1dDogaW5wdXQobWVzc2FnZSkgfSkKICAgICAgICAgIHJldHVybiB7IHNlbnQ6IHRydWUsIHNlc3Npb25faWQ6IGlkLCB0dXJuX2lkOiBvd24udHVybklkLCBub3RlOiAnQWRkZWQgdG8gdGhlIHR1cm4gQ29kZXggaXMgcnVubmluZy4nIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgdGhyZWFkID0gYXdhaXQgdGhyZWFkT2YoaWQpCiAgICAgICAgaWYgKChhd2FpdCBydW5uaW5nKHRocmVhZCkpLnJ1bm5pbmcpIHRocm93IG5ldyBFcnJvcignQ29kZXggaXMgd29ya2luZyBvbiB0aGlzIHNlc3Npb24gaW4gYW5vdGhlciBwcm9ncmFtICh0aGUgQ0xJLCBhbiBJREUsIG9yIHRoZSBDb2RleCBhcHApLiBTZW5kIGl0IHRoZXJlLCBvciB3YWl0IHVudGlsIGl0IGZpbmlzaGVzIGFuZCB0aGF0IHdpbmRvdyBpcyBjbG9zZWQuJykKICAgICAgICBhd2FpdCBjb2RleC5yZXF1ZXN0KCd0aHJlYWQvcmVzdW1lJywgeyB0aHJlYWRJZDogaWQsIGV4Y2x1ZGVUdXJuczogdHJ1ZSwgLi4ubW9kZWxPdmVycmlkZSB9KS5jYXRjaCgoZXJyb3IpID0+IHsgdGhyb3cgd3JpdGVyQnVzeShlcnJvcikgfSkKICAgICAgICBzdGF0ZS50aHJlYWRzLnNldChpZCwgeyB0aXRsZTogdGl0bGVPZih0aHJlYWQpLCBmb2xkZXI6IHRocmVhZC5jd2QgPz8gbnVsbCB9KQogICAgICAgIGNvbnN0IHR1cm5JZCA9IGF3YWl0IHN0YXJ0VHVybihpZCwgbWVzc2FnZSkKICAgICAgICByZXR1cm4geyBzZW50OiB0cnVlLCBzZXNzaW9uX2lkOiBpZCwgdHVybl9pZDogdHVybklkLCBub3RlOiAnQ29kZXggaXMgd29ya2luZyBvbiBpdDsgcmVhZF9zZXNzaW9uIHNob3dzIGl0cyByZXBseS4nIH0KICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICdzdGFydF9zZXNzaW9uJywKICAgICAgZGVzY3JpcHRpb246ICdTdGFydCBhIG5ldyBDb2RleCBzZXNzaW9uIGluIGEgZm9sZGVyIHdpdGggdGhlIHVzZXJcJ3MgZmlyc3QgbWVzc2FnZS4gVGhlIGZvbGRlciBtdXN0IGJlIGluc2lkZSBvbmUgb2YgdGhlIGZvbGRlcnMgYWxsb3dlZCBpbiB0aGlzIHBhY2tcJ3Mgc2V0dGluZ3MgKG5vbmUgYnkgZGVmYXVsdCwgd2hpY2ggdHVybnMgc3RhcnRpbmcgb2ZmKS4gQ29kZXggcnVucyBpdCB3aXRoIHRoZSB1c2VyXCdzIG93biBhcHByb3ZhbCBhbmQgc2FuZGJveCBzZXR0aW5ncy4nLAogICAgICBpbnB1dFNjaGVtYTogeyB0eXBlOiAnb2JqZWN0JywgcHJvcGVydGllczogeyBmb2xkZXI6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnQWJzb2x1dGUgZm9sZGVyIHRvIHdvcmsgaW4nIH0sIG1lc3NhZ2U6IHsgdHlwZTogJ3N0cmluZycgfSB9LCByZXF1aXJlZDogWydmb2xkZXInLCAnbWVzc2FnZSddIH0sCiAgICAgIGFubm90YXRpb25zOiB3b3JrLAogICAgICBydW46IGFzeW5jIChhcmdzKSA9PiB7CiAgICAgICAgY29uc3QgZm9sZGVyID0gYXJnLnN0cmluZyhhcmdzLCAnZm9sZGVyJywgeyBtYXg6IDFfMDAwIH0pCiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGFyZy5zdHJpbmcoYXJncywgJ21lc3NhZ2UnLCB7IG1heDogMjBfMDAwIH0pCiAgICAgICAgY29uc3Qgcm9vdHMgPSBhbGxvd2VkKCkKICAgICAgICBpZiAoIXJvb3RzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCJTdGFydGluZyBDb2RleCBzZXNzaW9ucyBpcyBvZmYuIFRoZSB1c2VyIGNhbiBhbGxvdyBmb2xkZXJzIGluIHRoaXMgcGFjaydzIEFsbG93ZWQgZm9sZGVycyBzZXR0aW5nLiIpCiAgICAgICAgaWYgKCFpc0Fic29sdXRlKGZvbGRlcikpIHRocm93IG5ldyBFcnJvcignZm9sZGVyIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCcpCiAgICAgICAgbGV0IHJlYWwKICAgICAgICB0cnkgewogICAgICAgICAgcmVhbCA9IHJlYWxwYXRoU3luYyhmb2xkZXIpCiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Zm9sZGVyfSBkb2VzIG5vdCBleGlzdGApCiAgICAgICAgfQogICAgICAgIGlmICghc3RhdFN5bmMocmVhbCkuaXNEaXJlY3RvcnkoKSkgdGhyb3cgbmV3IEVycm9yKGAke2ZvbGRlcn0gaXMgbm90IGEgZm9sZGVyYCkKICAgICAgICBpZiAoIXJvb3RzLnNvbWUoKHJvb3QpID0+IHJlYWwgPT09IHJvb3QgfHwgcmVhbC5zdGFydHNXaXRoKGAke3Jvb3R9JHtzZXB9YCkpKSB0aHJvdyBuZXcgRXJyb3IoYCR7Zm9sZGVyfSBpcyBub3QgaW5zaWRlIGFuIGFsbG93ZWQgZm9sZGVyICgke3Jvb3RzLmpvaW4oJywgJyl9KWApCiAgICAgICAgY29uc3QgeyB0aHJlYWQgfSA9IGF3YWl0IGNvZGV4LnJlcXVlc3QoJ3RocmVhZC9zdGFydCcsIHsgY3dkOiByZWFsLCAuLi5tb2RlbE92ZXJyaWRlIH0pCiAgICAgICAgc3RhdGUudGhyZWFkcy5zZXQodGhyZWFkLmlkLCB7IHRpdGxlOiBjbGlwKGZpcnN0TGluZShtZXNzYWdlKSwgODApLCBmb2xkZXI6IHJlYWwgfSkKICAgICAgICBjb25zdCB0dXJuSWQgPSBhd2FpdCBzdGFydFR1cm4odGhyZWFkLmlkLCBtZXNzYWdlKQogICAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUsIHNlc3Npb25faWQ6IHRocmVhZC5pZCwgdHVybl9pZDogdHVybklkLCBmb2xkZXI6IHJlYWwsIHRpdGxlOiBjbGlwKGZpcnN0TGluZShtZXNzYWdlKSwgODApIH0KICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICdzdG9wX3Nlc3Npb24nLAogICAgICBkZXNjcmlwdGlvbjogIlN0b3AgdGhlIHR1cm4gQ29kZXggaXMgcnVubmluZyBpbiBhIHNlc3Npb24gdGhpcyBwYWNrIHN0YXJ0ZWQgb3IgbWVzc2FnZWQuIEEgdHVybiBydW5uaW5nIGluIGFub3RoZXIgQ29kZXggcHJvZ3JhbSBjYW4gb25seSBiZSBzdG9wcGVkIHRoZXJlLiIsCiAgICAgIGlucHV0U2NoZW1hOiB7IHR5cGU6ICdvYmplY3QnLCBwcm9wZXJ0aWVzOiB7IHNlc3Npb25faWQ6IHsgdHlwZTogJ3N0cmluZycgfSB9LCByZXF1aXJlZDogWydzZXNzaW9uX2lkJ10gfSwKICAgICAgYW5ub3RhdGlvbnM6IHdvcmssCiAgICAgIHJ1bjogYXN5bmMgKGFyZ3MpID0+IHsKICAgICAgICBjb25zdCBpZCA9IHRocmVhZElkKGFyZ3MpCiAgICAgICAgY29uc3Qgb3duID0gc3RhdGUudHVybnMuZ2V0KGlkKQogICAgICAgIGlmIChvd24/LnN0YXR1cyA9PT0gJ2luUHJvZ3Jlc3MnKSB7CiAgICAgICAgICBhd2FpdCBjb2RleC5yZXF1ZXN0KCd0dXJuL2ludGVycnVwdCcsIHsgdGhyZWFkSWQ6IGlkLCB0dXJuSWQ6IG93bi50dXJuSWQgfSkKICAgICAgICAgIHJldHVybiB7IHN0b3BwZWQ6IHRydWUsIHNlc3Npb25faWQ6IGlkIH0KICAgICAgICB9CiAgICAgICAgaWYgKChhd2FpdCBydW5uaW5nKGF3YWl0IHRocmVhZE9mKGlkKSkpLnJ1bm5pbmcpIHRocm93IG5ldyBFcnJvcignVGhpcyB0dXJuIGlzIHJ1bm5pbmcgaW4gYW5vdGhlciBDb2RleCBwcm9ncmFtICh0aGUgQ0xJLCBhbiBJREUsIG9yIHRoZSBDb2RleCBhcHApLiBDb2RleCBsZXRzIG9ubHkgdGhhdCBwcm9ncmFtIHN0b3AgaXQuJykKICAgICAgICByZXR1cm4geyBzdG9wcGVkOiBmYWxzZSwgc2Vzc2lvbl9pZDogaWQsIG5vdGU6ICdOb3RoaW5nIGlzIHJ1bm5pbmcgaW4gdGhhdCBzZXNzaW9uLicgfQogICAgICB9LAogICAgfSwKICAgIHsKICAgICAgbmFtZTogJ3Jlc3BvbmRfcGVuZGluZycsCiAgICAgIGRlc2NyaXB0aW9uOiAiQW5zd2VyIG9uZSBhcHByb3ZhbCBmcm9tIGxpc3RfcGVuZGluZyB3aXRoIHRoZSB1c2VyJ3MgZGVjaXNpb246IGFwcHJvdmUsIGFwcHJvdmVfZm9yX3Nlc3Npb24gKGFsc28gYWxsb3cgdGhlIHNhbWUgYWdhaW4gaW4gdGhpcyBzZXNzaW9uKSwgZGVjbGluZSAoQ29kZXggY2FycmllcyBvbiB3aXRob3V0IGl0KSwgb3IgY2FuY2VsIChhbHNvIHN0b3BzIHRoZSB0dXJuKS4iLAogICAgICBpbnB1dFNjaGVtYTogeyB0eXBlOiAnb2JqZWN0JywgcHJvcGVydGllczogeyBpZDogeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdUaGUgYXBwcm92YWwgaWQgZnJvbSBsaXN0X3BlbmRpbmcnIH0sIGRlY2lzaW9uOiB7IHR5cGU6ICdzdHJpbmcnLCBlbnVtOiBERUNJU0lPTlMgfSB9LCByZXF1aXJlZDogWydpZCcsICdkZWNpc2lvbiddIH0sCiAgICAgIGFubm90YXRpb25zOiB3b3JrLAogICAgICBydW46IGFzeW5jIChhcmdzKSA9PiB7CiAgICAgICAgY29uc3QgaWQgPSBhcmcuc3RyaW5nKGFyZ3MsICdpZCcsIHsgcGF0dGVybjogQVBQUk9WQUxfSUQgfSkKICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGFyZy5vbmVPZihhcmdzLCAnZGVjaXNpb24nLCBERUNJU0lPTlMpCiAgICAgICAgY29uc3QgYXBwcm92YWwgPSBzdGF0ZS5hcHByb3ZhbHMuZ2V0KGlkKQogICAgICAgIGlmICghYXBwcm92YWwpIHRocm93IG5ldyBFcnJvcignVGhhdCBhcHByb3ZhbCBpcyBubyBsb25nZXIgd2FpdGluZy4gbGlzdF9wZW5kaW5nIHNob3dzIHRoZSBjdXJyZW50IG9uZXMuJykKICAgICAgICBjb25zdCByZXN1bHQgPSBhcHByb3ZhbC5raW5kID09PSAncGVybWlzc2lvbnMnCiAgICAgICAgICA/IGRlY2lzaW9uLnN0YXJ0c1dpdGgoJ2FwcHJvdmUnKQogICAgICAgICAgICA/IHsgcGVybWlzc2lvbnM6IHsgZmlsZVN5c3RlbTogYXBwcm92YWwucGFyYW1zLnBlcm1pc3Npb25zPy5maWxlU3lzdGVtID8/IG51bGwsIG5ldHdvcms6IGFwcHJvdmFsLnBhcmFtcy5wZXJtaXNzaW9ucz8ubmV0d29yayA/PyBudWxsIH0sIHNjb3BlOiBkZWNpc2lvbiA9PT0gJ2FwcHJvdmVfZm9yX3Nlc3Npb24nID8gJ3Nlc3Npb24nIDogJ3R1cm4nIH0KICAgICAgICAgICAgOiB7IHBlcm1pc3Npb25zOiB7fSB9CiAgICAgICAgICA6IHsgZGVjaXNpb246IHsgYXBwcm92ZTogJ2FjY2VwdCcsIGFwcHJvdmVfZm9yX3Nlc3Npb246ICdhY2NlcHRGb3JTZXNzaW9uJywgZGVjbGluZTogJ2RlY2xpbmUnLCBjYW5jZWw6ICdjYW5jZWwnIH1bZGVjaXNpb25dIH0KICAgICAgICBzdGF0ZS5hcHByb3ZhbHMuZGVsZXRlKGlkKQogICAgICAgIGNvZGV4LnJlc3BvbmQoYXBwcm92YWwucnBjSWQsIHJlc3VsdCkKICAgICAgICByZXR1cm4geyBhbnN3ZXJlZDogdHJ1ZSwgaWQsIHNlc3Npb25faWQ6IGFwcHJvdmFsLnRocmVhZElkLCBkZWNpc2lvbiB9CiAgICAgIH0sCiAgICB9LAogIF0KfQoKLyoqCiAqIFRoZSBwYWNrJ3Mgc3RhdGUgb3ZlciBvbmUgYXBwLXNlcnZlcjogdHVybnMgdGhpcyBwYWNrIHN0YXJ0ZWQsIHRoZWlyCiAqIGFwcHJvdmFscywgYW5kIHRoZSB0aXRsZXMgaXQga25vd3MuIFdpcmVzIHRoZSBhcHAtc2VydmVyJ3MgY2FsbGJhY2tzLgogKi8KZXhwb3J0IGZ1bmN0aW9uIGNvZGV4U2Vzc2lvbnMoeyBjb21tYW5kLCBhcmdzLCBlbnYsIGZvbGRlcnMsIG1vZGVsLCBub3cgPSAoKSA9PiBEYXRlLm5vdygpIH0pIHsKICBjb25zdCBzdGF0ZSA9IHsgdHVybnM6IG5ldyBNYXAoKSwgYXBwcm92YWxzOiBuZXcgTWFwKCksIHRocmVhZHM6IG5ldyBNYXAoKSB9CiAgbGV0IGFwcHJvdmFsU2VxID0gMAogIGNvbnN0IGNvZGV4ID0gYXBwU2VydmVyKHsKICAgIGNvbW1hbmQsCiAgICBhcmdzLAogICAgZW52LAogICAgb25SZXF1ZXN0KG1lc3NhZ2UpIHsKICAgICAgY29uc3Qga2luZCA9IEFQUFJPVkFMX01FVEhPRFNbbWVzc2FnZS5tZXRob2RdCiAgICAgIGlmICgha2luZCkgcmV0dXJuIGNvZGV4LnJlamVjdChtZXNzYWdlLmlkLCBgVGhlIFNpZGVidWQgQ29kZXggcGFjayBjYW5ub3QgYW5zd2VyICR7bWVzc2FnZS5tZXRob2R9YCkKICAgICAgY29uc3QgaWQgPSBgYSR7KythcHByb3ZhbFNlcX1gCiAgICAgIHN0YXRlLmFwcHJvdmFscy5zZXQoaWQsIHsgaWQsIHJwY0lkOiBtZXNzYWdlLmlkLCBraW5kLCB0aHJlYWRJZDogbWVzc2FnZS5wYXJhbXM/LnRocmVhZElkLCB0dXJuSWQ6IG1lc3NhZ2UucGFyYW1zPy50dXJuSWQsIHBhcmFtczogbWVzc2FnZS5wYXJhbXMgPz8ge30sIHJlY2VpdmVkQXQ6IG5vdygpIH0pCiAgICB9LAogICAgb25Ob3RpZmljYXRpb24obWV0aG9kLCBwYXJhbXMpIHsKICAgICAgaWYgKG1ldGhvZCA9PT0gJ3R1cm4vc3RhcnRlZCcgJiYgcGFyYW1zLnR1cm4pIHN0YXRlLnR1cm5zLnNldChwYXJhbXMudGhyZWFkSWQsIHsgLi4uc3RhdGUudHVybnMuZ2V0KHBhcmFtcy50aHJlYWRJZCksIHR1cm5JZDogcGFyYW1zLnR1cm4uaWQsIHN0YXR1czogJ2luUHJvZ3Jlc3MnLCBhdDogbmV3IERhdGUobm93KCkpLnRvSVNPU3RyaW5nKCkgfSkKICAgICAgaWYgKG1ldGhvZCA9PT0gJ3R1cm4vZGlmZi91cGRhdGVkJykgewogICAgICAgIGNvbnN0IG93biA9IHN0YXRlLnR1cm5zLmdldChwYXJhbXMudGhyZWFkSWQpCiAgICAgICAgaWYgKG93bikgb3duLmRpZmYgPSBwYXJhbXMuZGlmZgogICAgICB9CiAgICAgIGlmIChtZXRob2QgPT09ICd0dXJuL2NvbXBsZXRlZCcgJiYgcGFyYW1zLnR1cm4pIHsKICAgICAgICBzdGF0ZS50dXJucy5zZXQocGFyYW1zLnRocmVhZElkLCB7IC4uLnN0YXRlLnR1cm5zLmdldChwYXJhbXMudGhyZWFkSWQpLCB0dXJuSWQ6IHBhcmFtcy50dXJuLmlkLCBzdGF0dXM6IHBhcmFtcy50dXJuLnN0YXR1cywgYXQ6IG5ldyBEYXRlKG5vdygpKS50b0lTT1N0cmluZygpIH0pCiAgICAgICAgZm9yIChjb25zdCBbaWQsIGFwcHJvdmFsXSBvZiBzdGF0ZS5hcHByb3ZhbHMpIGlmIChhcHByb3ZhbC50aHJlYWRJZCA9PT0gcGFyYW1zLnRocmVhZElkKSBzdGF0ZS5hcHByb3ZhbHMuZGVsZXRlKGlkKQogICAgICAgIC8vIExldCBnbyBvZiB0aGUgc2Vzc2lvbiBzbyB0aGUgdXNlciBjYW4gY29udGludWUgaXQgZWxzZXdoZXJlOyBDb2RleCB1bmxvYWRzIGl0IHdpdGhpbiBhYm91dCBhIG1pbnV0ZS4KICAgICAgICBjb2RleC5yZXF1ZXN0KCd0aHJlYWQvdW5zdWJzY3JpYmUnLCB7IHRocmVhZElkOiBwYXJhbXMudGhyZWFkSWQgfSkuY2F0Y2goKCkgPT4ge30pCiAgICAgIH0KICAgICAgaWYgKG1ldGhvZCA9PT0gJ3NlcnZlclJlcXVlc3QvcmVzb2x2ZWQnKSBmb3IgKGNvbnN0IFtpZCwgYXBwcm92YWxdIG9mIHN0YXRlLmFwcHJvdmFscykgaWYgKGFwcHJvdmFsLnJwY0lkID09PSBwYXJhbXMucmVxdWVzdElkKSBzdGF0ZS5hcHByb3ZhbHMuZGVsZXRlKGlkKQogICAgfSwKICAgIC8vIFR1cm5zIHRoaXMgcGFjayBzdGFydGVkIGVuZCB3aXRoIHRoZSBjaGlsZDsgdGhlaXIgYXBwcm92YWxzIGdvIHdpdGggdGhlbS4KICAgIG9uRXhpdCgpIHsKICAgICAgZm9yIChjb25zdCBbaWQsIHR1cm5dIG9mIHN0YXRlLnR1cm5zKSBpZiAodHVybi5zdGF0dXMgPT09ICdpblByb2dyZXNzJykgc3RhdGUudHVybnMuc2V0KGlkLCB7IC4uLnR1cm4sIHN0YXR1czogJ2ludGVycnVwdGVkJyB9KQogICAgICBzdGF0ZS5hcHByb3ZhbHMuY2xlYXIoKQogICAgfSwKICB9KQogIHJldHVybiB7IGNvZGV4LCBzdGF0ZSwgdG9vbHM6IGNvZGV4VG9vbHMoeyBjb2RleCwgc3RhdGUsIGZvbGRlcnMsIG1vZGVsLCBub3cgfSkgfQp9CgppZiAoaW1wb3J0Lm1ldGEudXJsID09PSBwYXRoVG9GaWxlVVJMKHByb2Nlc3MuYXJndlsxXSA/PyAnJykuaHJlZikgewogIC8vIFRoZSBjb21wYW5pb24gZmlsbHMgdW5zZXQgdmFyaWFibGVzIHdpdGggZW1wdHkgc3RyaW5nczsgQ29kZXggbXVzdCBub3Qgc2VlIGFuIGVtcHR5IENPREVYX0hPTUUuCiAgY29uc3QgZW52ID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHByb2Nlc3MuZW52KS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09ICcnKSkKICBkZWxldGUgZW52LkNPREVYX1NFU1NJT05TX0ZPTERFUlMKICBkZWxldGUgZW52LkNPREVYX1NFU1NJT05TX01PREVMCiAgY29uc3QgeyBjb2RleCwgdG9vbHMgfSA9IGNvZGV4U2Vzc2lvbnMoeyBjb21tYW5kOiBwcm9jZXNzLmVudi5DT0RFWF9DT01NQU5EIHx8ICdjb2RleCcsIGVudiwgZm9sZGVyczogcGFyc2VGb2xkZXJzKHByb2Nlc3MuZW52LkNPREVYX1NFU1NJT05TX0ZPTERFUlMpLCBtb2RlbDogcHJvY2Vzcy5lbnYuQ09ERVhfU0VTU0lPTlNfTU9ERUwgPz8gJycgfSkKICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR1RFUk0nLCAnU0lHSU5UJ10pIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHsgY29kZXguY2xvc2UoKTsgcHJvY2Vzcy5leGl0KDApIH0pCiAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4gY29kZXguY2xvc2UoKSkKICBzZXJ2ZSh7IG5hbWU6ICdzaWRlYnVkLXBhY2stY29kZXgtc2Vzc2lvbnMnLCB2ZXJzaW9uOiBWRVJTSU9OLCB0b29scyB9KQp9Cg==","server/mcp.mjs":"Ly8gQSBtaW5pbWFsIE1DUCBzZXJ2ZXIgb3ZlciBzdGRpbzogbmV3bGluZS1kZWxpbWl0ZWQgSlNPTi1SUEMgMi4wIHdpdGggdGhlCi8vIGluaXRpYWxpemUsIHBpbmcsIHRvb2xzL2xpc3QsIGFuZCB0b29scy9jYWxsIG1ldGhvZHMuIE5vIGRlcGVuZGVuY2llcywgc28gYQovLyBwYWNrJ3Mgc2VydmVyIHJ1bnMgd2l0aCBwbGFpbiBgbm9kZWAgYW5kIG5vdGhpbmcgdG8gaW5zdGFsbC4gQ29weSB0aGlzIGZpbGUKLy8gaW50byBhbnkgcGFjayB0aGF0IHNoaXBzIGl0cyBvd24gc2VydmVyLgppbXBvcnQgeyBjcmVhdGVJbnRlcmZhY2UgfSBmcm9tICdub2RlOnJlYWRsaW5lJwoKLyoqCiAqIEVhY2ggdG9vbCBpcyBgeyBuYW1lLCBkZXNjcmlwdGlvbiwgaW5wdXRTY2hlbWEsIGFubm90YXRpb25zLCBydW4gfWAsIHdoZXJlCiAqIGBydW4oYXJncylgIHJldHVybnMgSlNPTiBkYXRhIChzZW50IGFzIHN0cnVjdHVyZWQgY29udGVudCBhbmQgYXMgdGV4dCkgb3IKICogdGhyb3dzIGFuIEVycm9yIHdob3NlIG1lc3NhZ2UgdGhlIGNhbGxlciBzZWVzLgogKi8KZXhwb3J0IGZ1bmN0aW9uIHNlcnZlKHsgbmFtZSwgdmVyc2lvbiwgdG9vbHMgfSkgewogIGNvbnN0IHNlbmQgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZSl9XG5gKQogIGNvbnN0IGhhbmRsZXJzID0gewogICAgaW5pdGlhbGl6ZTogKHBhcmFtcykgPT4gKHsgcHJvdG9jb2xWZXJzaW9uOiBwYXJhbXM/LnByb3RvY29sVmVyc2lvbiA/PyAnMjAyNS0wNi0xOCcsIGNhcGFiaWxpdGllczogeyB0b29sczoge30gfSwgc2VydmVySW5mbzogeyBuYW1lLCB2ZXJzaW9uIH0gfSksCiAgICBwaW5nOiAoKSA9PiAoe30pLAogICAgJ3Rvb2xzL2xpc3QnOiAoKSA9PiAoeyB0b29sczogdG9vbHMubWFwKCh7IHJ1bjogX3J1biwgLi4udG9vbCB9KSA9PiB0b29sKSB9KSwKICAgICd0b29scy9jYWxsJzogKHBhcmFtcykgPT4gY2FsbFRvb2wodG9vbHMsIHBhcmFtcz8ubmFtZSwgcGFyYW1zPy5hcmd1bWVudHMgPz8ge30pLAogIH0KICBjb25zdCBpbnB1dCA9IGNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluIH0pCiAgaW5wdXQub24oJ2xpbmUnLCBhc3luYyAobGluZSkgPT4gewogICAgbGV0IG1lc3NhZ2UKICAgIHRyeSB7CiAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGxpbmUpCiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuCiAgICB9CiAgICAvLyBOb3RpZmljYXRpb25zIChubyBpZCkgbmVlZCBubyByZXBseS4KICAgIGlmIChtZXNzYWdlPy5pZCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UuaWQgPT09IG51bGwpIHJldHVybgogICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzW21lc3NhZ2UubWV0aG9kXQogICAgaWYgKCFoYW5kbGVyKSByZXR1cm4gc2VuZCh7IGpzb25ycGM6ICcyLjAnLCBpZDogbWVzc2FnZS5pZCwgZXJyb3I6IHsgY29kZTogLTMyNjAxLCBtZXNzYWdlOiBgTWV0aG9kIG5vdCBmb3VuZDogJHttZXNzYWdlLm1ldGhvZH1gIH0gfSkKICAgIHRyeSB7CiAgICAgIHNlbmQoeyBqc29ucnBjOiAnMi4wJywgaWQ6IG1lc3NhZ2UuaWQsIHJlc3VsdDogYXdhaXQgaGFuZGxlcihtZXNzYWdlLnBhcmFtcykgfSkKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHNlbmQoeyBqc29ucnBjOiAnMi4wJywgaWQ6IG1lc3NhZ2UuaWQsIGVycm9yOiB7IGNvZGU6IC0zMjYwMywgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0gfSkKICAgIH0KICB9KQogIGlucHV0Lm9uKCdjbG9zZScsICgpID0+IHByb2Nlc3MuZXhpdCgwKSkKfQoKLyoqIFJ1bnMgb25lIHRvb2w7IGZhaWx1cmVzIGJlY29tZSBhbiBlcnJvciByZXN1bHQgdGhlIGFnZW50IGNhbiByZWFkLCBuZXZlciBhIGNyYXNoLiAqLwpleHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FsbFRvb2wodG9vbHMsIG5hbWUsIGFyZ3MpIHsKICBjb25zdCB0b29sID0gdG9vbHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gbmFtZSkKICBpZiAoIXRvb2wpIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogYFVua25vd24gdG9vbCAke25hbWV9YCB9XSwgaXNFcnJvcjogdHJ1ZSB9CiAgdHJ5IHsKICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0b29sLnJ1bihhcmdzKQogICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9XSwgc3RydWN0dXJlZENvbnRlbnQ6IGRhdGEgfQogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9XSwgaXNFcnJvcjogdHJ1ZSB9CiAgfQp9CgovKiogQXJndW1lbnQgY2hlY2tzIHRoYXQgdGhyb3cgYSByZWFkYWJsZSBtZXNzYWdlOyBlYWNoIHJldHVybnMgdGhlIHZhbHVlIG9yIGl0cyBkZWZhdWx0LiAqLwpleHBvcnQgY29uc3QgYXJnID0gewogIHN0cmluZyhhcmdzLCBrZXksIHsgbWF4ID0gNTAwLCBwYXR0ZXJuLCBmYWxsYmFjayB9ID0ge30pIHsKICAgIGNvbnN0IHZhbHVlID0gYXJnc1trZXldID8/IGZhbGxiYWNrCiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhdmFsdWUubGVuZ3RoIHx8IHZhbHVlLmxlbmd0aCA+IG1heCB8fCAocGF0dGVybiAmJiAhcGF0dGVybi50ZXN0KHZhbHVlKSkpIHRocm93IG5ldyBFcnJvcihgJHtrZXl9IGlzIG1pc3Npbmcgb3IgaW52YWxpZGApCiAgICByZXR1cm4gdmFsdWUKICB9LAogIG9wdGlvbmFsU3RyaW5nKGFyZ3MsIGtleSwgeyBtYXggPSAyXzAwMCB9ID0ge30pIHsKICAgIGNvbnN0IHZhbHVlID0gYXJnc1trZXldCiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZAogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUubGVuZ3RoID4gbWF4KSB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBpcyBpbnZhbGlkYCkKICAgIHJldHVybiB2YWx1ZQogIH0sCiAgaW50ZWdlcihhcmdzLCBrZXksIHsgbWluLCBtYXgsIGZhbGxiYWNrIH0pIHsKICAgIGNvbnN0IHZhbHVlID0gYXJnc1trZXldID8/IGZhbGxiYWNrCiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyIGZyb20gJHttaW59IHRvICR7bWF4fWApCiAgICByZXR1cm4gdmFsdWUKICB9LAogIGJvb2xlYW4oYXJncywga2V5LCBmYWxsYmFjaykgewogICAgY29uc3QgdmFsdWUgPSBhcmdzW2tleV0gPz8gZmFsbGJhY2sKICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gbXVzdCBiZSB0cnVlIG9yIGZhbHNlYCkKICAgIHJldHVybiB2YWx1ZQogIH0sCiAgb25lT2YoYXJncywga2V5LCBvcHRpb25zLCBmYWxsYmFjaykgewogICAgY29uc3QgdmFsdWUgPSBhcmdzW2tleV0gPz8gZmFsbGJhY2sKICAgIGlmICghb3B0aW9ucy5pbmNsdWRlcyh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihgJHtrZXl9IG11c3QgYmUgb25lIG9mICR7b3B0aW9ucy5qb2luKCcsICcpfWApCiAgICByZXR1cm4gdmFsdWUKICB9LAogIGxpc3QoYXJncywga2V5LCB7IG1pbiA9IDAsIG1heCA9IDIwLCBpdGVtIH0pIHsKICAgIGNvbnN0IHZhbHVlID0gYXJnc1trZXldCiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA8IG1pbiB8fCB2YWx1ZS5sZW5ndGggPiBtYXggfHwgIXZhbHVlLmV2ZXJ5KGl0ZW0pKSB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBpcyBtaXNzaW5nIG9yIGludmFsaWRgKQogICAgcmV0dXJuIHZhbHVlCiAgfSwKICBkYXRlVGltZShhcmdzLCBrZXksIGZhbGxiYWNrKSB7CiAgICBjb25zdCB2YWx1ZSA9IGFyZ3Nba2V5XSA/PyBmYWxsYmFjawogICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQKICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICEvXlxkezR9LVxkezJ9LVxkezJ9VFxkezJ9OlxkezJ9KDpcZHsyfShcLlxkKyk/KT8oWnxbKy1dXGR7Mn06XGR7Mn0pJC8udGVzdCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihgJHtrZXl9IG11c3QgYmUgYW4gSVNPIGRhdGUtdGltZSB3aXRoIGEgdGltZSB6b25lYCkKICAgIHJldHVybiB2YWx1ZQogIH0sCn0K","SKILL.md":"LS0tCm5hbWU6IENvZGV4IHNlc3Npb25zCmRlc2NyaXB0aW9uOiBTZWUgYW5kIHN0ZWVyIHRoZSBDb2RleCBzZXNzaW9ucyB0aGUgdXNlciBzdGFydGVkIGluIHRoZSBDb2RleCBDTEksIGFuIElERSwgb3IgdGhlIENvZGV4IGFwcCwgc3VjaCBhcyAid2hhdCdzIENvZGV4IGRvaW5nPyIsICJ0ZWxsIGl0IHRvIGFsc28gYWRkIHRlc3RzIiwgb3IgInN0b3AgaXQiLgotLS0KCiMgQ29kZXggc2Vzc2lvbnMKCkNvZGV4IChPcGVuQUkncyBjb2RpbmcgYWdlbnQpIGtlZXBzIGEgKipzZXNzaW9uKiogKGEgdGhyZWFkKSBmb3IgZWFjaCBjb252ZXJzYXRpb24gdGhlIHVzZXIgaGFzIHdpdGggaXQgaW4gdGhlIENvZGV4IENMSSwgYW4gSURFIGV4dGVuc2lvbiwgb3IgdGhlIENvZGV4IGFwcC4gRWFjaCBzZXNzaW9uIGJlbG9uZ3MgdG8gYSAqKmZvbGRlcioqICh0aGUgcHJvamVjdCBpdCB3b3JrcyBpbikgYW5kIGlzIG1hZGUgb2YgKip0dXJucyoqOiBvbmUgcmVxdWVzdCBmcm9tIHRoZSB1c2VyIGFuZCB0aGUgd29yayBDb2RleCBkb2VzIGZvciBpdC4gVGhpcyBwYWNrIHJlYWNoZXMgdGhlbSB0aHJvdWdoIGEgc21hbGwgc2VydmVyIHRoYXQgcnVucyBgY29kZXggYXBwLXNlcnZlcmAgb24gdGhpcyBjb21wdXRlci4gVG9vbCBuYW1lcyBiZWxvdyBhcmUgdGhlIHNlcnZlcidzIG93bjsgeW91ciBNQ1AgY2xpZW50IG1heSBzaG93IHRoZW0gd2l0aCB0aGlzIGludGVncmF0aW9uJ3MgcHJlZml4IChmb3IgZXhhbXBsZSBgY29kZXhfc2Vzc2lvbnNfX2xpc3Rfc2Vzc2lvbnNgKS4gUmVzdWx0cyBhcmUgSlNPTi4KCldvcmsgdGhhdCBTaWRlYnVkIGl0c2VsZiBzdGFydGVkIHdpdGggQ29kZXggaXMgdHJhY2tlZCBhcyAqKlNpZGVidWQgdGFza3MqKiwgbm90IGhlcmU7IGBsaXN0X3Nlc3Npb25zYCBsZWF2ZXMgdGhvc2Ugc2Vzc2lvbnMgb3V0LiBXaGVuIHRoZSB1c2VyIGFza3MgYWJvdXQgYSB0YXNrIHRoZXkgZ2F2ZSBTaWRlYnVkLCB1c2UgU2lkZWJ1ZCdzIHRhc2tzLgoKIyMgRmluZGluZyBhIHNlc3Npb24gZnJvbSB0aGUgdXNlcidzIHdvcmRzCgoxLiBgbGlzdF9zZXNzaW9uc2AgZ2l2ZXMgcmVjZW50IHNlc3Npb25zLCBuZXdlc3QgZmlyc3Q6IGB0aXRsZWAsIGBmb2xkZXJOYW1lYCwgYGFwcGAgKENvZGV4IENMSSwgSURFLCBDb2RleCBhcHAsIFNpZGVidWTigKYpLCBhbmQgYHN0YXRlYDogYHJ1bm5pbmdgLCBgbmVlZHNfeW91YCwgYGZpbmlzaGVkYCwgb3IgYHN0b3BwZWRgLiBQYXNzIGBmb2xkZXJgIChhbiBhYnNvbHV0ZSBwYXRoKSBvciBgc2VhcmNoYCAod29yZHMgaW4gdGhlIHRpdGxlKSB0byBuYXJyb3cgaXQuCjIuIE1hdGNoIHRoZSB1c2VyJ3Mgd29yZHMgYWdhaW5zdCB0aXRsZXMgYW5kIGZvbGRlciBuYW1lcyAoInRoZSBwaG90byBhcHAgb25lIiwgInRoZSBvbmUgZml4aW5nIHRlc3RzIikuICJXaGF0J3MgQ29kZXggZG9pbmc/IiBtZWFucyB0aGUgcnVubmluZyBzZXNzaW9ucywgb3IgdGhlIGxhdGVzdCBvbmUgd2hlbiBub25lIGlzIHJ1bm5pbmcuCjMuIFBpY2sgb25lLiBJZiBub25lIG9yIHNldmVyYWwgZml0LCBuYW1lIHRoZSBvbmVzIHlvdSBmb3VuZCBhbmQgYXNrLiBSZWZlciB0byBzZXNzaW9ucyBieSB0aXRsZSBhbmQgZm9sZGVyLCBuZXZlciBieSBpZC4KCiMjIFJlYWRpbmcgZm9yIHZvaWNlCgotIGByZWFkX3Nlc3Npb25gIHdpdGggYHNlc3Npb25faWRgIGdpdmVzIHRoZSBsYXRlc3QgbWVzc2FnZXMgYW5kIGBsYXRlc3RUdXJuYCAoc3RhdHVzLCBjb21tYW5kcyBydW4sIGZpbGVzIGNoYW5nZWQsIGVycm9yKS4gU3VtbWFyaXplIGluICoqdHdvIHNlbnRlbmNlcyBhdCBtb3N0Kio6IHdoYXQgaXQgd2FzIGFza2VkIGFuZCB3aGVyZSBpdCBzdGFuZHMuIE5ldmVyIHJlYWQgaWRzLCBjb2RlLCBsb2dzLCBvciBsb25nIG1lc3NhZ2VzIGFsb3VkLgotIGBnZXRfZGlmZmAgbGlzdHMgdGhlIGZpbGVzIHRoZSBsYXRlc3QgdHVybiBjaGFuZ2VkLCB3aXRoIGxpbmVzIGFkZGVkIGFuZCByZW1vdmVkLiBTYXkgaG93IG1hbnkgZmlsZXMgYW5kIHdoaWNoIG9uZXMgbWF0dGVyLCBub3QgdGhlIGRpZmYuCi0gYGxpc3RfcGVuZGluZ2AgbGlzdHMgYXBwcm92YWxzIHdhaXRpbmcgb24gdGhlIHVzZXIgKHNlZSBiZWxvdykuCgojIyBDaGFuZ2luZyB0aGluZ3MKCi0gKipNZXNzYWdpbmcgYSBzZXNzaW9uKio6IGBzZW5kX21lc3NhZ2VgIHdpdGggdGhlIHNlc3Npb24ncyBgc2Vzc2lvbl9pZGAgYW5kIHRoZSB1c2VyJ3Mgd29yZHMgKipleGFjdGx5IGFzIHRoZXkgc2FpZCB0aGVtKiouIERvIG5vdCByZXdyaXRlLCBleHBhbmQsIG9yIGFkZCBpbnN0cnVjdGlvbnMuIEl0IHJldHVybnMgYXQgb25jZTsgQ29kZXgncyByZXBseSBsYW5kcyBpbiB0aGUgc2Vzc2lvbi4gSWYgdGhlIHBhY2sncyBvd24gdHVybiBpcyBydW5uaW5nIHRoZXJlLCB0aGUgbWVzc2FnZSBqb2lucyBpdC4KLSAqKkEgbmV3IHNlc3Npb24qKjogYHN0YXJ0X3Nlc3Npb25gIHdpdGggYW4gYWJzb2x1dGUgYGZvbGRlcmAgYW5kIHRoZSB1c2VyJ3Mgd29yZHMgYXMgdGhlIGBtZXNzYWdlYCwgb25seSB3aGVuIHRoZSB1c2VyIGFza3MgZm9yIG5ldyB3b3JrIGluIENvZGV4LiBJdCB3b3JrcyBvbmx5IGluc2lkZSB0aGUgZm9sZGVycyB0aGUgdXNlciBhbGxvd2VkIGluIHRoaXMgcGFjaydzIHNldHRpbmdzIChub25lIGJ5IGRlZmF1bHQpLiBJZiBpdCBzYXlzIHN0YXJ0aW5nIGlzIG9mZiwgdGVsbCB0aGUgdXNlciB0aGV5IGNhbiBhbGxvdyBmb2xkZXJzIG9uIHRoZSBwYWNrJ3MgcGFnZTsgZG8gbm90IHBpY2sgYW5vdGhlciBmb2xkZXIuCi0gKipBcHByb3ZhbHMqKjogYGxpc3RfcGVuZGluZ2Agc2hvd3Mgd2hhdCBDb2RleCBpcyB3YWl0aW5nIG9uIChgc3VtbWFyeWAsIGBjb21tYW5kYCwgYGtpbmRgKS4gVGVsbCB0aGUgdXNlciB3aGF0IGl0IHdhbnRzIHRvIGRvLCB0aGVuIGNhbGwgYHJlc3BvbmRfcGVuZGluZ2Agd2l0aCB0aGUgYXBwcm92YWwncyBgaWRgIGFuZCB0aGUgZGVjaXNpb24gdGhlIHVzZXIgYWN0dWFsbHkgZ2F2ZTogYGFwcHJvdmVgLCBgYXBwcm92ZV9mb3Jfc2Vzc2lvbmAgKG9ubHkgaWYgdGhleSBzYWlkIHRvIGFsbG93IGl0IGZyb20gbm93IG9uKSwgYGRlY2xpbmVgLCBvciBgY2FuY2VsYCAoZGVjbGluZSBhbmQgc3RvcCB0aGUgdHVybikuIE5ldmVyIGFwcHJvdmUgb24geW91ciBvd24ganVkZ21lbnQsIGFuZCBuZXZlciBwaWNrIGEgYnJvYWRlciBkZWNpc2lvbiB0aGFuIHRoZSB1c2VyIHNhaWQuCi0gQSBzdWNjZXNzZnVsIGNhbGwgaXMgdGhlIGNvbmZpcm1hdGlvbi4gRG8gbm90IHJlYWQgdGhlIHNlc3Npb24gYmFjayB0byBjaGVjaywgYW5kIGRvIG5vdCBzZW5kIHRoZSBzYW1lIG1lc3NhZ2UgdHdpY2UuCgojIyBTdG9wcGluZwoKYHN0b3Bfc2Vzc2lvbmAgc3RvcHMgdGhlIHR1cm4gQ29kZXggaXMgcnVubmluZyBpbiBhIHNlc3Npb24uIFVzZSBpdCAqKm9ubHkgd2hlbiB0aGUgdXNlciBleHBsaWNpdGx5IHNheXMgc3RvcCwgY2FuY2VsLCBoYWx0LCBvciBraWxsKiogZm9yIHRoYXQgc2Vzc2lvbjsgInBhdXNlIiwgImhvbGQgb24iLCBvciBhIGNvbXBsYWludCBpcyBub3QgYSBzdG9wLiBTYXkgaXQgd2FzIHN0b3BwZWQ7IHRoZXJlIGlzIG5vIHVuZG8sIGJ1dCB0aGUgdXNlciBjYW4gc2VuZCB0aGUgc2Vzc2lvbiBhIG5ldyBtZXNzYWdlIHRvIGNvbnRpbnVlLgoKIyMgTGltaXRzIGFuZCBlcnJvcnMKCi0gKipPbmUgcHJvZ3JhbSBwZXIgc2Vzc2lvbi4qKiBDb2RleCBsZXRzIG9ubHkgb25lIHByb2dyYW0gd29yayBpbiBhIHNlc3Npb24gYXQgYSB0aW1lLiBBIHNlc3Npb24gc3RpbGwgb3BlbiBpbiB0aGUgQ0xJLCBhbiBJREUsIG9yIHRoZSBDb2RleCBhcHAgKGV2ZW4gaWRsZSkgY2FuIGJlIHJlYWQgYnV0IG5vdCBtZXNzYWdlZCBmcm9tIGhlcmU7IHRoZSBlcnJvciBzYXlzIHNvLiBTdWdnZXN0IHRoZSB1c2VyIHNlbmRzIGl0IHRoZXJlLCBvciBjbG9zZXMgdGhhdCB3aW5kb3cgZmlyc3QuCi0gKipTdG9wcGluZyBhbmQgYXBwcm92YWxzIG9ubHkgZm9yIHRoaXMgcGFjaydzIG93biB0dXJucy4qKiBDb2RleCBzZW5kcyBhIHR1cm4ncyBhcHByb3ZhbCByZXF1ZXN0cyBvbmx5IHRvIHRoZSBwcm9ncmFtIHRoYXQgc3RhcnRlZCBpdCwgYW5kIG9ubHkgdGhhdCBwcm9ncmFtIGNhbiBzdG9wIGl0LiBTbyBgbGlzdF9wZW5kaW5nYCBhbmQgYHN0b3Bfc2Vzc2lvbmAgY292ZXIgdHVybnMgc3RhcnRlZCB3aXRoIGBzZW5kX21lc3NhZ2VgIG9yIGBzdGFydF9zZXNzaW9uYC4gRm9yIGEgdHVybiBydW5uaW5nIGluIHRoZSBDTEksIGFuIElERSwgb3IgdGhlIENvZGV4IGFwcCwgdGhlIHVzZXIgbXVzdCBhcHByb3ZlIG9yIHN0b3AgaXQgdGhlcmU7IHNheSBzbyBwbGFpbmx5LgotIEFmdGVyIHRoaXMgcGFjaydzIHR1cm4gZmluaXNoZXMsIENvZGV4IHJlbGVhc2VzIHRoZSBzZXNzaW9uIHdpdGhpbiBhYm91dCBhIG1pbnV0ZTsgdW50aWwgdGhlbiwgY29udGludWluZyBpdCBpbiBhIHRlcm1pbmFsIChgY29kZXggcmVzdW1lYCkgc2F5cyBhbm90aGVyIHByb2dyYW0gaGFzIGl0LgotIFR1cm5zIHRoaXMgcGFjayBzdGFydHMgdXNlIHRoZSB1c2VyJ3Mgb3duIENvZGV4IGFwcHJvdmFsIGFuZCBzYW5kYm94IHNldHRpbmdzLCBhbmQgdGhlIG1vZGVsIGluIHRoZWlyIENvZGV4IGNvbmZpZyB1bmxlc3MgdGhlIHBhY2sncyBNb2RlbCBzZXR0aW5nIG5hbWVzIGFub3RoZXIuCi0gQSBzZXNzaW9uIGNvdW50cyBhcyBydW5uaW5nIHdoaWxlIGl0cyBsYXRlc3QgdHVybiBpcyBvcGVuIGluIENvZGV4J3Mgc2Vzc2lvbiBmaWxlOyBhIHR1cm4gbGVmdCBvcGVuIGZvciAyMCBtaW51dGVzIHdpdGhvdXQgYW55IGFjdGl2aXR5IGNvdW50cyBhcyBzdG9wcGVkIChpdHMgcHJvZ3JhbSB3YXMgcHJvYmFibHkgY2xvc2VkKS4KLSBBbiBlcnJvciB0aGF0IGBjb2RleGAgaXMgbm90IGluc3RhbGxlZCwgb3IgdGhhdCBDb2RleCBpcyB0b28gb2xkLCBtZWFucyB0aGUgdXNlciBtdXN0IGluc3RhbGwgb3IgdXBkYXRlIENvZGV4ICgwLjE1NyBvciBsYXRlcikgYW5kIHNpZ24gaW4gd2l0aCBgY29kZXggbG9naW5gLgotICJDb2RleCBhcHAtc2VydmVyIHN0b3BwZWQiIG1lYW5zIENvZGV4J3MgYmFja2dyb3VuZCBwcm9jZXNzIGV4aXRlZDsgdGhlIG5leHQgY2FsbCBzdGFydHMgaXQgYWdhaW4uIFR1cm5zIHRoaXMgcGFjayB3YXMgcnVubmluZyBzdG9wIHdpdGggaXQuCg=="},"signature":{"publicKey":"4d9b98c280e248815370a0c3fe152828a508cc7955e60e1910c9a90c97e9a674","value":"0ef41ae97bb6e71bbf4d6227b5126b097b4a5794ee93365b7f883c93fb377f20d616f3e1699d4a11761046811e85fa470144aa15e28420c705ca786b1a8aab05"}},"error":null}